中国移動ユーザーの質問に登る


最近、親友が爬虫類をやっていて、いろいろな質問をしたので、いっそ直接例を書きました.
このプログラムは全体的に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)