scrapy之创建scrapy项目
1. scrapy的安装
注: scrapy需要python3.8+
使用以下命令安装scrapy项目
pip install scrapy
2. 创建scrapy项目
2.1 创建scrapy项目
scrapy startproject baidutop # 创建一个baidutop项目
2.2 创建spider
cd baidutop # 进入到baidutop文件夹中,注意baidutop文件夹里面还有一个baidutop文件夹,这里选择外面的这个baidutop文件夹
scrapy genspider topbaidu top.baidu.com # topbaidu是spider的名称(每个spider应该有唯一的一个名称),top.baidu.com为spider要采集的域名
2.3 初始spider
import scrapy
class TopbaiduSpider(scrapy.Spider):
name = "topbaidu" # spider名称
allowed_domains = ["top.baidu.com"] # 允许采集的域名
start_urls = ["https://top.baidu.com"] # 自动生成的初始url,没有start_requests函数将自动从这里面开始进行采集
# 解析函数,如果没有指定callback,请求完成后将自动回调parse进行解析
def parse(self, response):
pass
2.4 完整版spider
import scrapy
# 每一个自设置的spide都要继承scrapy.Spider
class TopbaiduSpider(scrapy.Spider):
name = 'topbaidu'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
}
def start_requests(self):
urls = [
'https://top.baidu.com/board?tab=realtime'
]
for url in urls:
yield scrapy.Request(
url,
headers=self.headers
)
def parse(self, response):
urls = response.xpath("//a[@class='title_dIF3B ']/@href").getall()
for url in urls:
print('======================')
print(url)
print('======================')
yield scrapy.Request(
url,
headers=self.headers,
callback=self.parse_detail
)
def parse_detail(self, response):
items = {
'title': ''.join(response.xpath("//title/text()").getall())
}
self.log(items)
yield items
2.5 运行spider
scrapy crawl topbaidu # 正常运行
scrapy crawl topbaidu -o top.json # 将items写入到top.json文件中,生成json文件