python-3.x - 使用scrapy关注新闻链接
问题描述
我是爬虫和爬虫的新手,我正在尝试从https://www.lacuarta.com/提取一些新闻,也只是与标签 san-valentin 匹配的新闻。
该网页只是带有新闻图片的标题,如果您想阅读它,您必须点击新闻,然后您将进入故事页面(https://www.lacuarta.com/etiqueta/圣瓦伦丁/ )
所以,我想我的步骤是:
- 转到与我想要的标签匹配的页面,在本例中为 san-valentin
- 从新闻中提取网址
- 转到新闻页面
- 提取我想要的数据
我已经有了第 1 点和第 2 点:
import scrapy
class SpiderTags(scrapy.Spider):
name = "SpiderTags"
def start_requests(self):
url = 'https://www.lacuarta.com/etiqueta/'
tag = getattr(self, 'tag', None)
if tag is not None:
url = url + 'etiqueta/' + tag
yield scrapy.Request(url, self.parse)
def parse(self, response):
for url in response.css("h4.normal a::attr(href)"):
yield{
"link:": url.get()
}
到这里我有新闻的链接,现在我不知道如何输入该新闻以提取我想要的数据,然后返回我的原始网页以转到第 2 页并重复所有内容
PD:我想要的信息已经知道如何获得它
- 标题:
response.css("title::text").get()
- 故事:
response.css("div.col-md-11 p::text").getall()
- 作者:
response.css("div.col-sm-6 h4 a::text").getall()
- 日期:
response.css("div.col-sm-6 h4 small span::text").getall()
解决方案
您需要yield
一个新Request
的才能访问该链接。例如:
def parse(self, response):
for url in response.css("h4.normal a::attr(href)"):
# This will get the URL value, not follow it:
# yield{
# "link:": url.get()
# }
# This will follow the URL:
yield scrapy.Request(url.get(), self.parse_news_item)
def parse_news_item(self, response):
# Extract things from the news item page.
yield {
'Title': response.css("title::text").get(),
'Story': response.css("div.col-md-11 p::text").getall(),
'Author': response.css("div.col-sm-6 h4 a::text").getall(),
'Date': response.css("div.col-sm-6 h4 small span::text").getall(),
}
推荐阅读
- neo4j - 使用 Cypher 查询语言在 Neo4j 中进行平均错误
- arrays - 如何对MongoDB中数组中的所有值求和?
- asp.net-mvc - 使用承载认证时如何编写控制器测试?
- typescript - 打字稿枚举数组变量
- html - 列表样式类型:无;第二次在代码中使用不工作
- reactjs - React - 错误:找不到所需的文件;在 ../../public 中搜索
- javascript - 如何使用 Javascript 编辑表格行的 rowIndex
- python-3.x - 重命名列正则表达式,如果不匹配则保留名称
- java - Spring boot 2.2.4是否支持Caffeine AsyncCache实现
- c# - 如何从c#中的方法返回两个字符串数组