我再次在使用Scrapy提取特定链接时遇到问题。这是HTML摘录:
<section class="test">
<div class="Testclass">
<form id="Form" name="FormName" method="get" action="#plpPaginationAnchor">
<select id="pageSelectionBottom" name="page">
<option value="0" disabled="" selected="">
Seite 1 von 2</option>
<option value="1">2</option>
</select>
<input type="hidden" name="sort" value="code-asc">
<input type="hidden" name="q" value=":code-asc">
<a class="nextpage" href="**LINK**" data-action="next" data-flight="control">
<i class="icon="Next"></i>
</a>
</form>
我需要href标记中的链接。除其他外,我尝试了以下操作:
url = response.css('div.testclass > a::attr(href)').extract_first()
如果有人可以在这里帮助我,我将不胜感激。
答案 0 :(得分:2)
这是在易碎的外壳中执行的操作:
> from scrapy.http import HtmlResponse
>
> response = HtmlResponse(url="Test HTML String", body='<section class="test"><div class="Testclass"><form id="Form" name="FormName" method="get" action="#plpPaginationAnchor"><select id="pageSelectionBottom" name="page"><option value="0" disabled="" selected="">Seite 1 von 2</option><option value="1">2</option></select><input type="hidden" name="sort" value="code-asc"><input type="hidden" name="q" value=":code-asc"><a class="nextpage" href="**LINK**" data-action="next" data-flight="control"><i class="icon="Next"></i></a></form>', encoding='utf-8')
>
> response.css('a::attr(href)').extract_first()
答案 1 :(得分:0)
您是否尝试过将BeautifulSoup
与requests
一起使用?
使用此模块的示例:
import requests
from bs4 import BeautifulSoup as bs
l = requests.get(search)
page = l.text
soup= bs(page,'html.parser')
link = soup.findAll('a',attrs={'class':'nextpage'})
我以前使用过的类似的东西很有效,以后可能不得不编辑这篇文章,但是使用bs4
和requests
仍然是有效的方法。
如果findAll
的类别多于一个,<a>
(如果youtube具有相同的类,则您可能不想这样做)(例如youtube的每个视频都有这个类别,而使用findall将获取每个视频的网址)搜索),它将检索链接
答案 2 :(得分:0)
好吧,当我尝试使用它时:response.css(“ section> div> form> a :: attr(href)”)。extract_first()我得到了链接。我不知道这是否是最好的解决方案,但是它可以工作,
答案 3 :(得分:0)
url = response.css('div.testclass > form > a::attr(href)').extract_first()
您的原始选择器正在寻找a
的直接后代形式的div.testclass
。您想根据代码段的结构查看form
的直接后代div.testclass
中的内容。
您也可以尝试以下方法:
url = response.css('div.testclass a::attr(href)').extract_first()
但不会那么具体。