如何打开网页中的多个链接并抓取对应页面数据?
嘿,我来帮你搞定这个多链接抓取的问题!先梳理下你现有代码里的小问题,再给你靠谱的实现方案~
如何批量处理网页链接并抓取页面数据
先说说你原代码里的几个小问题
urls定义有误:末尾的逗号让它变成了元组,而且注释掉的链接格式也不对,正确的列表应该是urls = ['链接1', '链接2', ...]这种形式- 混用工具不合理:Scrapy是专门的异步爬虫框架,自带请求和解析能力,不需要手动用
urlopen读取内容,也没必要调用浏览器打开页面(浏览器是给人看的,爬虫只需要获取页面源码就够啦) start_requests方法不符合Scrapy规范:这个方法应该返回Scrapy的Request对象,而不是自己手动去处理链接
方案1:纯Scrapy批量爬取(推荐,爬虫常规操作)
这个方案完全利用Scrapy的异步特性,高效爬取多个链接的数据,不需要打开浏览器:
import scrapy class ForumSpider(scrapy.Spider): name = "forum" # 定义要爬取的所有目标链接 start_urls = [ 'https://tribune.com.pk/', 'https://www.siasat.pk/forum/content.php/', 'http://hamariweb.com/news/', 'https://www.urdupoint.com/pakistan/all-news/' ] def parse(self, response): # 这里写解析页面数据的逻辑,示例抓取页面标题 self.logger.info(f"正在解析页面: {response.url}") page_title = response.xpath('//title/text()').get() if page_title: # 把爬取到的数据返回,后续可以保存到文件/数据库 yield { 'page_url': response.url, 'page_title': page_title.strip() } # 如果需要抓取页面内的其他子链接(比如新闻详情页),可以在这里继续生成请求 # 示例: # for detail_link in response.xpath('//a/@href').getall(): # yield response.follow(detail_link, callback=self.parse_detail_page) # 可选:如果有详情页需要单独解析,写对应的回调函数 # def parse_detail_page(self, response): # # 解析详情页的具体内容,比如新闻正文 # news_content = response.xpath('//div[@class="content"]/text()').getall() # yield { # 'detail_url': response.url, # 'content': ' '.join(news_content).strip() # }
运行方式
在终端执行这条命令,爬取结果会自动保存到results.json文件里:
scrapy crawl forum -o results.json
方案2:如果确实需要打开浏览器(仅用于调试,不推荐爬虫使用)
要是你因为调试需求必须打开浏览器查看页面,可以结合webbrowser,但注意这会让爬虫变成同步操作,效率会降低:
import webbrowser import scrapy class ForumSpider(scrapy.Spider): name = "forum" start_urls = [ 'https://tribune.com.pk/', 'https://www.siasat.pk/forum/content.php/', 'http://hamariweb.com/news/', 'https://www.urdupoint.com/pakistan/all-news/' ] def parse(self, response): # 打开当前页面的浏览器窗口 webbrowser.open(response.url) self.logger.info(f"已打开浏览器页面: {response.url}") # 继续解析页面数据 page_title = response.xpath('//title/text()').get() if page_title: yield { 'page_url': response.url, 'page_title': page_title.strip() }
关键提醒
- Scrapy的核心优势就是异步请求、自动去重、重试机制这些,是批量爬取的最佳选择,尽量不要和
urlopen这类工具混用 - 如果遇到动态渲染的页面(比如内容靠JS加载),
webbrowser也搞不定,这时候可以用Selenium或Playwright这类工具模拟真实浏览器,但那是更进阶的场景啦
内容的提问来源于stack exchange,提问作者Umair Hanif
相关产品推荐
相关产品推荐

