爬取中国移动用户问答

最近一个好朋友在搞爬虫,问了很多问题,所以干脆直接写了一个范例。

这个程序整体要两次解析网页:

第一层是分析网页中的json数据来获取qtid,

第二层是用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)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值