网络抓取与Scrapy的链接

时间:2018-10-12 10:55:35

标签: python scrapy web-crawler

我再次在使用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&nbsp;1&nbsp;von&nbsp;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()

如果有人可以在这里帮助我,我将不胜感激。

4 个答案:

答案 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&nbsp;1&nbsp;von&nbsp;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)

您是否尝试过将BeautifulSouprequests一起使用?

使用此模块的示例:

    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'})

我以前使用过的类似的东西很有效,以后可能不得不编辑这篇文章,但是使用bs4requests仍然是有效的方法。

如果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()

但不会那么具体。