使用 Scrapy 爬取网站时遇到的常见问题及解决方案
- 被禁止访问网站,无法爬取数据
解决方案:
- 检查是否使用了正确的 User-Agent,尝试更改 User-Agent。
- 检查网站的 robots.txt 文件,遵守爬虫协议。
- 尝试使用代理 IP。
- 降低抓取频率,避免被网站封 IP。
- 页面加载 JavaScript 渲染,无法获取数据
解决方案:
- 使用 Headless Chrome 或 PhantomJS 等工具模拟浏览器行为。
- 分析页面加载时发起的 Ajax 请求,通过 Ajax 接口获取数据。
- 模拟触发页面事件,获取加载后的页面内容。
- XPath 或 CSS Selector 无法正确匹配数据
解决方案:
- 确认 Selector 是否正确,可以使用浏览器的开发者工具进行验证。
- 确认爬取的页面是否与 Selector 匹配,需要注意网站反爬虫时可能会更改页面结构。
- 尝试使用正则表达式匹配数据。
- 爬虫运行过程中意外中断
解决方案:
- 检查错误日志,确认错误信息。
- 根据错误信息修复代码或者调整配置。
- 将页面下载下来,手动进行调试。
下面是一个简单的演示,使用 Scrapy 爬虫爬取“pidancode.com”网站上的文章标题和链接:
- 创建一个新的 Scrapy 项目:
scrapy startproject pidancode_spider
- 创建一个 Spider,并编写爬虫代码:
import scrapy class PidancodeSpider(scrapy.Spider): name = 'pidancode' allowed_domains = ['pidancode.com'] start_urls = ['http://pidancode.com/'] def parse(self, response): # 获取文章列表 posts = response.xpath('//div[@class="post-list"]/div') for post in posts: item = {} item["title"] = post.xpath('.//h2/a/text()').extract_first() item["link"] = post.xpath('.//h2/a/@href').extract_first() yield item
- 运行 Spider:
scrapy crawl pidancode
- 爬取结果:
{ "title": "用 Python 图像处理库 Timorite 制作灵魂画师?赶紧试试!", "link": "http://pidancode.com/make-soul-painter-with-python-timorite/" }, { "title": "为什么要学编程?", "link": "http://pidancode.com/why-learn-programming/" }, { "title": "Python 编程案例:用 Pillow 图像处理库制作电影台词图案", "link": "http://pidancode.com/python-pillow-make-movie-dialog-patterns/" }, ...
这个例子中没有遇到什么错误,不过在实际爬虫过程中,遇到问题时可以先寻找日志信息找到错。误的地方并进行修复,或者到 Stack Overflow 等技术论坛上搜索类似的问题。
相关文章