我又来了
初步探索scrapy
https://www.appinn.com/category/windows/这里有很多小众软件,很多好东西。我们如果想要得到这个网站推荐的所有 Windows 软件的文章标题和链接,用 Scrapy 写的爬虫如下
start_urls = ['https://www.appinn.com/category/windows/']
#这是开始请求响应
yield result# 把结果告诉 Scrapy
yield response.follow(next_page, self.parse)# 开始爬下一页,并使用 parse 方法解析
scrapy的css选择器很强。和BeautifulSoup一样,#表示id,.表示class。我们来看一些例子。
# 从响应里解析出所有 article 标签
response.css('article')
# 从 article 里解析出 class 为 title 的 h2 标签 下面的 a 标签
response.css('h2.title a')
如果选择class包含container的div元素
response.css('div.container')
当要选择的元素有多个 class 时下一页
这个 a 元素有 next 和 page-number 两个 class,可以写多个 . 来选择:response.css(‘a.next.page-numbers’)。表示选择 class 同时包含 next 和 page-numbers 的 a 元素,这里不能有空格。
response.css('a.next.page-numbers')
想要文本内容就后面加上::text就好。如果想要纯文本,需要加上get()或者getall().举个例子
# 取符合条件的第一条数据
response.css('h2.title.post-title a::text').get()
# 取符合条件的所有数据
response.css('h2.title.post-title a::text').getall()
下面来看看attrib。它实际上是一个字典。我们可以用a.attrib可以看到a元素上的所有属性。我来用两种方法打印h2.title.post-title a 这个条件的标签的 href 属性
for a in response.css('h2.title.post-title a'):
print(a.attrib['href'])
或者用加上::attr(href)a的方法
for href in response.css('h2.title.post-title a::attr(href)').getall():
print(href)