1.先创建一个文件夹用来运行整个爬虫项目
2.在PowerShell 中:cd 进入文件夹所在位置
3.通过scrapy 命令创建爬虫项目:
scrapy startproject 项目名
然后可以在所创建的文件夹下看到所创建的爬虫项目文件夹
(1)进入所创建项目:
cd .\qsquto(项目名)\
(2)创建爬虫文件之前看一下有哪些模板:
scrapy genspider -l
Available templates:
basic 普通爬虫模板
crawl 自动爬虫模板 |
|
csvfeed
xmlfeed
(3)创建自动爬虫文件:
scrapy genspider -t crawl auto(文件名) qiushibaike.com(域名)
(4)创建成功后,在PyCharm中打开该项目文件
3.在PyCharm中的相应py文件中进行修改
(1)items.py
把pass删掉
并增加相应内容,如:
content=scrapy.Field()
link=scrapy.Field()
(2)在爬虫文件auto中导入对应item
以及Request
from scrapy.http import Request
from qsquto.items import QsqutoItem
①修改 rules中的链接提取规律:
rules = (
Rule(LinkExtractor(allow=r'article'), callback='parse_item', follow=True),
)
②修改函数parse_item中的xpath表达式
it["content"]=response.xpath("//div[@class='content']/span/text()").extract()
it["link"]=response.xpath("//a[@class='contentHref']/@href").extract()
def parse_item(self, response):
i = QsqutoItem()
#i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
#i['name'] = response.xpath('//div[@id="name"]').extract()
#i['description'] = response.xpath('//div[@id="description"]').extract()
i["content"] = response.xpath("//div[@class='content']/span/text()").extract()
i["link"] = response.xpath("//a[@class='contentHref']/@href").extract()
return i
4、设置模拟浏览器去爬(在爬虫文件auto中):
把start_urls注释掉
同时加入函数 def start_requests(self):
'''start_urls = ['http://qiushibaike.com/']'''
def start_requests(self):
ua={"User-Agent":'Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/61.0'}
yield Request('http://www.qiushibaike.com/',headers=ua)
5、再在settings.py中设置后续爬虫时的User-Agent
crtl+f 输入User-Agent 找到对应位置 把User-Agent的注释消掉 ,并修改其User-Agent的值
6、在pipelines.py中做处理,如输出或写入文件
class QsqutoPipeline(object):
def process_item(self, item, spider):
for i in range(0,len(item["content"])):
print(item["content"][i])
print(item["link"][i])
return item
7、启动爬虫,注意在相应的文件夹下
scrapy crawl auto |
|
#-*-coding:utf-8-*-
importscrapy
fromscrapy.linkextractorsimportLinkExtractor
fromscrapy.spidersimportCrawlSpider,Rule
fromscrapy.httpimportRequest
fromqsquto.itemsimportQsqutoItem
classAutoSpider(CrawlSpider):
name='auto' |
|
allowed_domains=['qiushibaike.com']
start_urls=['http://qiushibaike.com/']
rules=(
Rule(LinkExtractor(allow=r'Items/'),callback='parse_item',follow=True),
)
defparse_item(self,response):
i={}
#i['domain_id']=response.xpath('//input[@id="sid"]/@value').extract()
#i['name']=response.xpath('//div[@id="name"]').extract()
#i['description']=response.xpath('//div[@id="description"]').extract()
returni