如何获取下一页中的链接并将其存储在变量中?
How to obtain links in the following page and store it inside a variable?
我的objective是从一个页面中提取所有链接并存储起来,这样我就可以设计另一个爬虫来从中提取信息,并获得相关链接的详尽列表。
但是,似乎我没有将抓取工具指向正确的方向来提取这些链接,因为我得到了一个 NULL 列表。
'''
class ArticleSpider(scrapy.Spider):
name = 'links'
start_urls = [
'https://abcnews.go.com/search?searchtext=Coronavirus&type=Story&sort=date'
]
def parse(self, response):
all_links = response.css("h2.selectorgadget_selected
a.AnchorLink.selectorgadget_selected::attr(href)").extract()
yield{'linktext':all_links}
'''
您得到的是空列表,因为项目及其链接由 JavaScript 加载。
在 Chrome Dev Tools 中按 Cntrl + Shift + P 并执行 Disable JavaScript.After 你可以看到当 Scrapy 在 start_urls 中向 url 发出请求时得到了什么。 =13=]
幸运的是,您的脚本只是向 API 发出请求,您可以轻松地 mock.Here 您可以看到来自 API 的 JSON 响应。
所以你只需要在解析方法中向这个 url 发出请求 - https://abcnews.go.com/meta/api/search?q=Coronavirus&limit=10&sort=date&type=Story§ion=&totalrecords=true&offset=0。
之后你所要做的就是解析这个响应并得到你需要的url。
import scrapy
import json
from scrapy import Request
class ArticleSpider(scrapy.Spider):
name = 'links'
start_urls = [
'https://abcnews.go.com/search?searchtext=Coronavirus&type=Story&sort=date'
]
api_url = "https://abcnews.go.com/meta/api/search?q=Coronavirus&limit=100&sort=date&type=Story§ion=&totalrecords=true&offset=0"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0",
"Accept": "*/*",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
"Pragma": "no-cache",
"Cache-Control": "no-cache",
}
custom_settings = {
'ROBOTSTXT_OBEY': 'False',
}
def parse(self, response):
# We need this because otherwise Scrapy won't manage Cookies for us.
yield Request(self.api_url, self.parse_api, headers=self.headers)
def parse_api(self, response):
data = json.loads(response.text)
# From data you can get your links
我的objective是从一个页面中提取所有链接并存储起来,这样我就可以设计另一个爬虫来从中提取信息,并获得相关链接的详尽列表。 但是,似乎我没有将抓取工具指向正确的方向来提取这些链接,因为我得到了一个 NULL 列表。
'''
class ArticleSpider(scrapy.Spider):
name = 'links'
start_urls = [
'https://abcnews.go.com/search?searchtext=Coronavirus&type=Story&sort=date'
]
def parse(self, response):
all_links = response.css("h2.selectorgadget_selected
a.AnchorLink.selectorgadget_selected::attr(href)").extract()
yield{'linktext':all_links}
'''
您得到的是空列表,因为项目及其链接由 JavaScript 加载。 在 Chrome Dev Tools 中按 Cntrl + Shift + P 并执行 Disable JavaScript.After 你可以看到当 Scrapy 在 start_urls 中向 url 发出请求时得到了什么。 =13=]
幸运的是,您的脚本只是向 API 发出请求,您可以轻松地 mock.Here 您可以看到来自 API 的 JSON 响应。
所以你只需要在解析方法中向这个 url 发出请求 - https://abcnews.go.com/meta/api/search?q=Coronavirus&limit=10&sort=date&type=Story§ion=&totalrecords=true&offset=0。 之后你所要做的就是解析这个响应并得到你需要的url。
import scrapy
import json
from scrapy import Request
class ArticleSpider(scrapy.Spider):
name = 'links'
start_urls = [
'https://abcnews.go.com/search?searchtext=Coronavirus&type=Story&sort=date'
]
api_url = "https://abcnews.go.com/meta/api/search?q=Coronavirus&limit=100&sort=date&type=Story§ion=&totalrecords=true&offset=0"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0",
"Accept": "*/*",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
"Pragma": "no-cache",
"Cache-Control": "no-cache",
}
custom_settings = {
'ROBOTSTXT_OBEY': 'False',
}
def parse(self, response):
# We need this because otherwise Scrapy won't manage Cookies for us.
yield Request(self.api_url, self.parse_api, headers=self.headers)
def parse_api(self, response):
data = json.loads(response.text)
# From data you can get your links