一.分析
1.爬取网站:https://xyq.163.com/chongwu/
2.获取网页源码:
request.get("https://xyq.163.com/chongwu/").text
这里就有问题了
这是查看网页源代码看到的源码,也是通过requests获取的源码,发现是空的
这是在检查处拿到的源码,发现有数据了
发现代码中没有使用json,js中也无相应json数据(2022.3.18更新:其实是有json文件的,当时没找到😂),因此数据是通过js动态加载出来的,因此选择selenium+火狐浏览器组合爬取页面(selenium是一个测试工具,selenium通过打开火狐驱动器加载火狐浏览器),可以获取加载js后的HTML页面
3.解析html,获取每个召唤兽data-id和名称
循环请求新的网址:https://xyq.163.com/chongwu/zhsxq.html?id=爬取的id&type=1
同样,新的网址依旧不能通过requests获取源代码
解析并抓取p标签的数据
二.代码实现:
from selenium import webdriver from pyquery import PyQuery as pq import pandas as pd firefox_options = webdriver.FirefoxOptions() firefox_options.add_argument('--headless') browser = webdriver.Firefox(options=firefox_options) browser.get("https://xyq.163.com/chongwu/") resp = browser.page_source browser.quit() data = pq(resp) ret = data(".xxd li").items() zhs_list = [] title = ["召唤兽名称"] count = 0 for i in ret: id = i.attr("data-id") name = i.text() browser2 = webdriver.Firefox(options=firefox_options) browser2.get("https://xyq.163.com/chongwu/zhsxq.html?id=%d&type=1" % int(id)) resp2 = browser2.page_source browser2.quit() data2 = pq(resp2) ret2 = data2(".zhszz p").items() # 资质信息 zizhi_list = [name] for j in ret2: if count == 0: top = j.text().split(" ")[0] title.append(top) zizhi = j('span').text() zizhi_list.append(zizhi) count += 1 zhs_list.append(zizhi_list) table = pd.DataFrame(zhs_list, columns=title) print(table) table.to_csv("梦幻西游召唤兽信息.csv",index=False,encoding="utf-8")
三.可能遇到的问题
1.如果没有下载selenium ,先下载
pip3 install selenium
2. 下载火狐浏览器驱动包firefoxdriver,https://github.com/mozilla/geckodriver/releases,下载完以后,将exe文件放入python.exe目录下,直接使用webdriver.Firefox()即可,否则就需要加上如下代码:
from selenium.webdriver.chrome.service import Service s=Service(r"你的exe文件路径") browser = webdriver.Firefox(service=s)
四.运行结果: