爬虫 scrapy (十二)
2023-12-13 10:42:15
目录
爬取电影天堂的电影名、图片,图片地址位于电影名的下一层链接中。
获取标题,点击链接?
再获取这一页的图片?
一、创建爬虫项目及文件
scrapy startproject scrapy_099
scrapy genspider movie?http://category.dangdang.com/cp01.36.04.00.00.00.html
二、获取电影名和图片
在 items.py 中定义变量
class Scrapy099Item(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
name = scrapy.Field()
src = scrapy.Field()
在 movie.py 中定义函数
这里在 parse函数中获取到了name,但是想要获取图片,需要点击链接,进入到下一个页面,所以这里我们又自己定义了一个 parse_second函数,用来获取图片,同时也需要将 name 传递给这个函数,然后再和图片链接统一传递给管道。
class MovieSpider(scrapy.Spider):
name = 'movie'
allowed_domains = ['www.dytt.to']
start_urls = ['https://www.dytt.to/html/gndy/china/index.html']
def parse(self, response):
print('===============================')
# 获取第一页的 name 和要点击的链接
a_list = response.xpath('//div[@class="co_content8"]/ul//a[2]')
for i in a_list:
name = i.xpath('./text()').get()
href = i.xpath('./@href').get()
# 第二页地址
url = 'http://www.dytt.to' + href
# 对第二页的链接发起访问
# 将name的值传递给 parse_second
yield scrapy.Request(url=url,callback=self.parse_second, meta={'name':name})
# print(name, url)
def parse_second(self, response):
# 如果拿不到数据,检查Xpath语法是否正确
# span检测不到,语法中最好不要出现span
src = response.xpath('//div[@id="Zoom"]//img/@src').get()
# 接收到请求的meta参数的值
name = response.meta['name']
movie = Scrapy099Item(name=name, src=src)
yield movie
在 settings.py 中打开管道
在 pipelines.py 中写文件
class Scrapy099Pipeline:
# 在爬虫文件开始之前就执行的一个文件
def open_spider(self, spider):
print('++++++++++++++++++++++++++')
self.fp = open('movie.json', 'w', encoding='utf-8')
def process_item(self, item, spider):
self.fp.write(str(item))
return item
# 在爬虫文件执行完之后再执行的方法
def close_spider(self, spider):
print('----------------------')
self.fp.close()
参考
文章来源:https://blog.csdn.net/m0_45447650/article/details/134456266
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!