中国移動ユーザーの質問に登る
最近、親友が爬虫類をやっていて、いろいろな質問をしたので、いっそ直接例を書きました.
このプログラムは全体的に2回ページを解析します.
第1層はウェブページのjsonデータを分析してqtidを取得し、
第2層はqtidで問答を得たページを解析する
質疑応答ページに格納されているデータは、参照されているデータベースのデータであるため、非効率なseleniumモードを選択せざるを得ない
分析する時間がないorz暇があったらもう一度分析しましょう
このプログラムは全体的に2回ページを解析します.
第1層はウェブページのjsonデータを分析してqtidを取得し、
第2層はqtidで問答を得たページを解析する
質疑応答ページに格納されているデータは、参照されているデータベースのデータであるため、非効率なseleniumモードを選択せざるを得ない
分析する時間がないorz暇があったらもう一度分析しましょう
# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import urllib
import time
import requests
import json
from jsonpath import jsonpath # jsonpath jsonpath
time_start=time.time()
chrome_options=Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('User-Agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36"')
#driver.get_cookie('COOKIE=sid=0f1f6197-de86-449b-b3d6-5508951fce35')
def get_url(n):# json
url='http://online.10086.cn/bbs/front/sh/postdetails!list?uid=faqs001&pageno='+str(n)+'&proCode=&endTime=&beginTime=&sortType='
return url
def url_get1(qtid):#
url='http://online.10086.cn/bbs/question/'+str(qtid)+'.html?qtid='+str(qtid)+'&userimgurl=style/tu4.gif'
return url
headers={'Cookie':'sid=0f1f6197-de86-449b-b3d6-5508951fce35',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36',
'Referer':'http://online.10086.cn/bbs/faqs/faqsIndex.html?link=faqslink'
}
n=1
while(n<20):
response=requests.post(get_url(n),headers=headers)
result=json.loads(response.text)
qtid = jsonpath(result, '$..qtid')// qtid
n+=1
a=0
while(a<10):
driver = webdriver.Chrome(options=chrome_options)
driver.get(url_get1(qtid[a]))
title=driver.find_elements_by_css_selector('#doc-bd-c > div.contain_right.clearfix.fl > div > div.invitation_con > p > span.typename')
img=driver.find_elements_by_css_selector('#doc-bd-c > div.contain_right.clearfix.fl > div > div.invitation_con > h1 > span:nth-child(3)')
content=driver.find_elements_by_css_selector('#doc-bd-c > div.contain_right.clearfix.fl > div > div.invitation_con > div.invitation_content > p:nth-child(1)')
for x,y,z in zip(title,img,content):
data={'class':x.text,
'title':y.text,'content':z.text}
print(data)
a += 1
driver.close()
time_over=time.time()
print(time_over-time_start)