安装Scrapy框架:
pip install scrapy
创建一个新的Scrapy项目:
scrapy startproject google_search
进入项目目录:
cd google_search
创建一个新的爬虫:
scrapy genspider google_spider www.google.com
编辑爬虫文件:
edit google_search/spiders/google_spider.py
import scrapy
from scrapy.http import Request
from urllib.parse import quote
class GoogleSpider(scrapy.Spider):
name = 'google_spider'
allowed_domains = ['www.google.com']
start_urls = ['https://www.google.com/search?q=so&source=hp&ei=clWpZMHEArze4-EP_tGusA8&iflsig=AD69kcEAAAAAZKljgpV7rjBRGIpmk1S12wEUcYes8Kk-&ved=0ahUKEwjBxa2gjf__AhU87zgGHf6oC_YQ4dUDCAk&uact=5&oq=so&gs_lcp=Cgdnd3Mtd2l6EAMyBwgAEAQQgAQyBwgAEAQQgAQyBwgAEAQQgAQyBwgAEAQQgAQyBwgAEAQQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBwgAEAQQgAQyBwgAEAQQgARQnxdY_lFgllhoBXAAeACAAYEBiAHgApIBAzAuM5gBAKABAbABAA&sclient=gws-wiz']
def parse(self, response):
# 提取搜索结果中的链接
search_results = response.css('div.g')
for result in search_results:
title = result.css('h3 a::text').get()
link = result.css('h3 a::attr(href)').get()
yield {'title': title, 'link': link}
# 提取下一页的链接
next_page = response.css('a[rel="next"]::attr(href)').get()
if next_page is not None:
yield response.follow(next_page, callback=self.parse)
在项目根目录下运行命令:
scrapy crawl google_spider
查看输出结果,即爬取到的搜索结果。
为了提高爬虫效率,可以使用多线程或异步IO的方式来处理请求和响应。在Scrapy中,可以使用concurrent_requests
参数来设置并发请求数。例如,将并发请求数设置为10:
settings = {
'CONCURRENT_REQUESTS': 10,
}
为了避免被网站封禁,可以设置User-Agent,模拟浏览器访问。在Scrapy中,可以在项目的settings.py
文件中设置User-Agent:
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
为了提高爬虫稳定性,可以使用异常处理来捕获可能出现的错误。例如,当请求失败时,可以记录日志并继续执行后续操作。在Scrapy中,可以使用try-except
语句来实现异常处理。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。