【问题标题】:Python - BeautifulSoup WebscrapePython - BeautifulSoup 网络爬虫
【发布时间】:2015-05-12 09:11:23
【问题描述】:

我正在尝试从以下网站 (http://thedataweb.rm.census.gov/ftp/cps_ftp.html) 中抓取 URL 列表,但是按照教程我的运气为零。这是我尝试过的代码示例:

from bs4 import BeautifulSoup
import urllib2

url         = "http://thedataweb.rm.census.gov/ftp/cps_ftp.html"
page        = urllib2.urlopen(url)
soup        = BeautifulSoup(page.read())
cpsLinks    = soup.findAll(text = 
              "http://thedataweb.rm.census.gov/pub/cps/basic/")

print(cpsLinks)

我正在尝试提取这些链接:

http://thedataweb.rm.census.gov/pub/cps/basic/201501-/jan15pub.dat.gz

可能有大约 200 个这些链接。我怎样才能得到它们?

【问题讨论】:

  • 到底出了什么问题?
  • 如果只是您要查找的那些 URL,为什么不使用简单的模式匹配?

标签: python html web-scraping beautifulsoup html-parsing


【解决方案1】:

据我了解,您希望提取遵循特定模式的链接BeautifulSoup 允许您将a regular expression pattern 指定为属性值。

让我们使用以下模式:pub/cps/basic/\d+\-/\w+\.dat\.gz$'。它将匹配 pub/cps/basic/ 后跟一个或多个数字 (\d+),后跟一个连字符 (\-),后跟一个斜线,一个或多个字母数字字符 (\w+),然后是 .dat.gz字符串的结尾。注意-.在正则表达式中有特殊含义,需要用反斜杠转义。

代码:

import re
import urllib2

from bs4 import BeautifulSoup


url = "http://thedataweb.rm.census.gov/ftp/cps_ftp.html"
soup = BeautifulSoup(urllib2.urlopen(url))

links = soup.find_all(href=re.compile(r'pub/cps/basic/\d+\-/\w+\.dat\.gz$'))

for link in links:
    print link.text, link['href']

打印:

13,232,040 http://thedataweb.rm.census.gov/pub/cps/basic/201501-/jan15pub.dat.gz
13,204,510 http://thedataweb.rm.census.gov/pub/cps/basic/201401-/dec14pub.dat.gz
13,394,607 http://thedataweb.rm.census.gov/pub/cps/basic/201401-/nov14pub.dat.gz
13,409,743 http://thedataweb.rm.census.gov/pub/cps/basic/201401-/oct14pub.dat.gz
13,208,428 http://thedataweb.rm.census.gov/pub/cps/basic/201401-/sep14pub.dat.gz
...
10,866,849 http://thedataweb.rm.census.gov/pub/cps/basic/199801-/jan99pub.dat.gz
3,172,305 http://thedataweb.rm.census.gov/pub/cps/basic/200701-/disability.dat.gz

【讨论】:

  • 谢谢!这样可行。我也尝试了正则表达式抓取,但根据您的代码,我没有正确设置它,因为它抓取了一个无法使用的更大块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 2013-10-15
  • 2013-01-09
相关资源
最近更新 更多