是否有可能在网页拥有它时使刮板在额外的页面中起作用?

时间:2012-11-12 17:40:53

标签: python beautifulsoup scraper

from twill.commands import *
from bs4 import BeautifulSoup
from urllib import urlopen
import urllib2

with open('urls.txt') as inf:
    urls = (line.strip() for line in inf)
    for url in urls:
        try:
            urllib2.urlopen(url)
        except urllib2.HTTPError, e:
            print e
        site = urlopen(url)   
        soup = BeautifulSoup(site)
        for td in soup.find_all('td', {'class': 'subjectCell'}):
            print td.find('a').text

我的代码只从文件的每个网址打开一个页面,有时会有更多页面,在这种情况下,下一页的模式将是& page = x

这是我正在谈论的那些页面:

http://www.last.fm/user/TheBladeRunner_/library/tags?tag=long+track http://www.last.fm/user/TheBladeRunner_/library/tags?tag=long+track&page=7

3 个答案:

答案 0 :(得分:1)

您可以从next_page链接中读取 href 属性并将其添加到 urls 列表中(是的,您应该将元组更改为列表)。它可能是这样的:

from twill.commands import *
from bs4 import BeautifulSoup
from urllib import urlopen
import urllib2
import urlparse

with open('urls.txt') as inf:
    urls = [line.strip() for line in inf]
    for url in urls:
        try:
            urllib2.urlopen(url)
        except urllib2.HTTPError, e:
            print e
        site = urlopen(url)   
        soup = BeautifulSoup(site)
        for td in soup.find_all('td', {'class': 'subjectCell'}):
            print td.find('a').text

        next_page = soup.find_all('a', {'class': 'nextlink'}):
        if next_page:
            next_page = next_page[0]
            urls.append(urlparse.urljoin(url, next_page['href']))

答案 1 :(得分:0)

你可以创建一些东西,从页面获取所有链接并跟随它们,scrapy免费提供

您可以创建一个蜘蛛,它将跟随页面上的所有链接。假设有其他页面的分页链接,您的刮刀将自动跟随它们。

你可以通过使用beautifulsoup解析页面上的所有链接来完成同样的事情,但是为什么scrapy已经免费使用它呢?

答案 2 :(得分:-1)

我不确定我理解你的问题,但你可能会考虑创建一些与你的“下一个”模式匹配的正则表达式(http://www.tutorialspoint.com/python/python_reg_expressions.htm),然后搜索它在页面上找到的URL中。当站点内链接具有高度一致性时,我会使用这种方法。