- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习如何在 Scraperwiki 中使用 Python 编写爬虫。到目前为止一切顺利,但我已经花了几天时间挠头解决一个我无法解决的问题。我正在尝试从表中获取所有链接。它有效,但是从从 001 到 486 的链接列表中,它只在 045 开始抓取它们。url/源只是网站上的城市列表,源可以在这里看到:
http://www.tripadvisor.co.uk/pages/by_city.html具体的 html 从这里开始:
</td></tr>
<tr><td class=dt1><a href="by_city_001.html">'s-Gravenzande, South Holland Province - Aberystwyth, Ceredigion, Wales</a></td>
<td class=dt1><a href="by_city_244.html">Los Corrales de Buelna, Cantabria - Lousada, Porto District, Northern Portugal</a></td>
</tr>
<tr><td class=dt1><a href="by_city_002.html">Abetone, Province of Pistoia, Tuscany - Adamstown, Lancaster County, Pennsylvania</a> /td>
<td class=dt1><a href="by_city_245.html">Louth, Lincolnshire, England - Lucciana, Haute-Corse, Corsica</a></td>
</tr>
<tr><td class=dt1><a href="by_city_003.html">Adamswiller, Bas-Rhin, Alsace - Aghir, Djerba Island, Medenine Governorate</a> </td>
<td class=dt1><a href="by_city_246.html">Luccianna, Haute-Corse, Corsica - Lumellogno, Novara, Province of Novara, Piedmont</a></td>
</tr>
我所追求的是从“by_city_001.html”到“by_city_486.html”的链接。这是我的代码:
def scrapeCityList(pageUrl):
html = scraperwiki.scrape(pageUrl)
root = lxml.html.fromstring(html)
print html
links = root.cssselect('td.dt1 a')
for link in links:
url = 'http://www.tripadvisor.co.uk' + link.attrib['href']
print url
在代码中调用如下:
scrapeCityList('http://www.tripadvisor.co.uk/pages/by_city.html')
现在当我运行它时,它只会返回从 0045 开始的链接!
输出(045~486)
http://www.tripadvisor.co.ukby_city_045.html
http://www.tripadvisor.co.ukby_city_288.html
http://www.tripadvisor.co.ukby_city_046.html
http://www.tripadvisor.co.ukby_city_289.html
http://www.tripadvisor.co.ukby_city_047.html
http://www.tripadvisor.co.ukby_city_290.html and so on...
我试过将选择器更改为:
links = root.cssselect('td.dt1')
它像这样获取 487 个“元素”:
<Element td at 0x13d75f0>
<Element td at 0x13d7650>
<Element td at 0x13d76b0>
但我无法从中获取“href”值。当我在 cssselect 行中选择“a”时,我不明白为什么它会丢失前 44 个链接。我查看了代码,但没有任何线索。
在此先感谢您的帮助!
克莱尔
最佳答案
您的代码运行良好。你可以在这里看到它的实际效果:https://scraperwiki.com/scrapers/tripadvisor_cities/
我已将保存添加到数据存储区,因此您可以看到它实际上处理了所有链接。
import scraperwiki
import lxml.html
def scrapeCityList(pageUrl):
html = scraperwiki.scrape(pageUrl)
root = lxml.html.fromstring(html)
links = root.cssselect('td.dt1 a')
print len(links)
batch = []
for link in links[1:]: #skip the first link since it's only a link to tripadvisor and not a subpage
record = {}
url = 'http://www.tripadvisor.co.uk/' + link.attrib['href']
record['url'] = url
batch.append(record)
scraperwiki.sqlite.save(["url"],data=batch)
scrapeCityList('http://www.tripadvisor.co.uk/pages/by_city.html')
如果您使用第二个 css 选择器:
links = root.cssselect('td.dt1')
那么您选择的是 td 元素而不是 a 元素(它是 td 的子元素)。您可以通过执行以下操作来选择 a:
url = 'http://www.tripadvisor.co.uk/' + link[0].attrib['href']
您在其中选择 td 的第一个子元素(即 [0])。
如果您想查看 lxml.html 中元素的所有属性,请使用:
print element.attrib
对于 td 给出:
{'class': 'dt1'}
{'class': 'dt1'}
{'class': 'dt1'}
...
对于 a:
{'href': 'by_city_001.html'}
{'href': 'by_city_244.html'}
{'href': 'by_city_002.html'}
...
关于Python scraper (Scraperwiki) 只得到一半的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14588775/
我需要创建一个脚本来发出 HTTP 请求并模拟浏览器在 cookie 管理方面的行为。这意味着它可以访问该“页面”设置的所有 cookie(服务器设置 cookie、异步客户端设置 cookie、每个
我有一个简单的 JavaScript 抓取工具,用于本地页面。 我会找到所有“title”类元素的 id 属性。 问题是,当我在屏幕上打印变量时,变量(title1)永远是“未定义”,而不是像它必须的
我编写了一些代码来解析来自 yell.com 的不同商店的名称、地址和电话号码。如果为我的爬虫提供了任何链接,它就会解析整个内容,而不管它分布在多少页面上。然而,我能发现的唯一问题是它总是跳过第一页的
我用 python 结合 BeautifulSoup 编写了一个脚本,使用其分页按钮转到网站的下一页 (有一个链接连接到这个按钮)直到没有新的页面可供抓取。我的脚本可以使用分页链接抓取下一页。然而,问
我用 python 编写了一个脚本,用于从 craigslist 中抓取五个项目的“姓名”和“电话”。我面临的问题是,当我运行脚本时,它只给出三个结果而不是五个结果。更具体地说,由于前两个链接的页面中
我用 python 结合 selenium 编写了一个脚本来解析网页中的名称。该网站的数据未启用 JavaScript。然而,下一页链接是在 javascript 内的。由于如果我使用 request
我在 python 中编写了一个小脚本,使用 xpath 从 yahoo finance 中抓取显示在左侧区域的标题。该页面中有几个标题,但是当我运行我的脚本时,我只得到三个标题。我不想在这种情况下使
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我用 python 结合 Selenium 编写了一个脚本,以提取 finance.yahoo 网站左侧栏中显示的不同新闻的标题。我已经使用 css 选择器来获取内容。但是,该脚本既没有给出任何结果也
我用 python 结合 selenium 编写了一个脚本,以便在搜索时显示一些名称和相应的地址,搜索关键字是“Saskatoon”。但是,在这种情况下,数据会遍历多个页面。除了一件事,我的脚本几乎完
例如,我有下一张 table First 1 Second 2
想要在某些 channel 统计数据中删除youtube,并了解其工作原理。并且比作csv作以下分析。使用this video创建和学习。 我有2个文件: main.py,youtube_statis
我正在尝试抓取此页面 https://www.teamrankings.com/nba/team/cleveland-cavaliers但我需要当您单击“投注 View ”时显示的网格...我遇到了一
我编写了一个抓取工具来解析来自 torrent 站点的电影信息。我使用了 IE 和 queryselector。 我的代码确实解析了所有内容。当一切完成后,它会抛出错误而不是退出浏览器。如果我取消错误
我正在尝试创建一个在名为 https://en.wikipedia.org/wiki/North_Korea_and_weapons_of_mass_destruction 的维基百科页面上启动的蜘蛛
我正在尝试抓取this网站使用 python 为献血营准备数据库。 首先,在尝试从 requests 或 urllib 获取网站 html 源代码时,存在 SSl:certificate_verify
我正在尝试使用允许空格和句点的正则表达式编写一个 python scraper。 我正在尝试从某个网站获取棒球队名称,因此有些是 Miami (全字),但其他是 San Francisco (带空格)
我已经用Python创建了一个网络爬虫,但是在最后打印时我想打印我已经下载的(“Bakerloo:”+ info_from_website),正如你在代码中看到的那样,但它总是像info_from_w
我有这个代码: #!/opt/local/bin/perl use 5.014; use warnings; use Web::Scraper; use Data::Dumper; my $html
我正在尝试使用 Scrapy 来抓取该网站。 首先这是我的代码-: from twisted.internet import reactor from scrapy.crawler import Cr
我是一名优秀的程序员,十分优秀!