c 抓取网页数据(你将看到selenium自动化抓取遇到的问题可借鉴该思路 )
优采云 发布时间: 2022-01-08 09:25c 抓取网页数据(你将看到selenium自动化抓取遇到的问题可借鉴该思路
)
你会看到selenium在携程的自动爬取过程中遇到的问题。可以借鉴这个思路爬取其他网站1.分析网页
近日,导师下达了爬取携程游轮用户评论数据的任务。对于一个非编程出身的门外汉来说,这项任务并不容易。
携程网站功能
示例网址:
抓取评论时,评论页是ajax异步加载的,尝试动态加载抓取,F12打开评论元素的Network,用移动端抓取,查看preserve log refresh,发现json文件xhr下有需要的资料
尝试构建一个url列表,使用requests得到一个收录评论的json文件,然后再次解析提取信息?但问题来了。在分析 url 模式时发现,对于每个请求,收录所需信息的所有不同 json 文件的 url 都是相同的。
并且打开url报错,没有请求信息,json文件如下
ResponseStatus
Timestamp "/Date(1557366295878+0800)/"
Ack "Failure"
Errors
Message "PARAM_ERROR, 请求字符串错误,condition不能为空"
ErrorCode "1002"
ErrorFields []
Extension
Id "CruiseTraceId"
Value "4a6a4ef2287b46daae809c53ce6f0253"
1
Id "CLOGGING_TRACE_ID"
Value "5629678003315929336"
2
Id "RootMessageId"
Value "921812-0a1c7300-432601-1467766"
2.代码实现selenium的环境配置
有很多关于 Firefox 和 Chrome 相关版本的博客。我使用火狐浏览器。配置geckodriver后,无需任何其他配置即可实现添加cookies、代理IP和User-Agent的功能。(网上很多博客需要安装一些插件来实现以上功能,自己踩坑,不用安装就可以添加cookies、代理IP和User-Agent)
硒可通过以下方式获得
示例结果
索引序列号代码有问题。不是从1开始的,但是影响不大。稍微修改一下就足够了。
代码
<p># -*- coding: UTF-8 -*-
import csv
import re
import time
from selenium import webdriver
import random
# ============================================================================
#******* 更换相应邮轮页面的url和评论页数pages即可,爬 *******
#******* 完一条邮轮更换携程账号名ID和密码和密码pwd *******
#=============================================================================
url = 'https://cruise.ctrip.com/c/8372.html#departure=2019-07-29&sellerid=39348_5049'
ID = '你的携程账号'
pwd = '你的携程密码'
browser = webdriver.Firefox()
browser.get(url)
time.sleep(1)
# 登陆
browser.find_element_by_xpath('/html/body/div[1]/div/ul[2]/li[1]/a/span').click()
browser.find_element_by_id('nloginname').send_keys(ID)
time.sleep(0.7)
browser.find_element_by_id('npwd').send_keys(pwd)
time.sleep(0.8)
button_click = browser.find_element_by_id('nsubmit').click()
time.sleep(5)
# 获取评论总页数
first_page_html = browser.page_source
total_pages = re.findall('cyl_page_point.*?data-index="772">(.*?)</a>