[英]What are good Perl or Python starting points for a site scraping library? [duplicate]
可能重复:
如何使用Perl屏幕抓取?
使用Python进行网页抓取
这不是我的工作领域,所以请原谅普遍缺乏知识。 我正在寻找用于站点抓取的Python或Perl库(从站点/各个页面上的表中获取一些产品信息/以一种更加用户友好的格式-Excel-两种语言都有令人满意的选择)以及良好的文档。
任何人都可以对此主题提出建议或起点吗? 谷歌搜索提供了一些有趣的比赛,但是时间短了一点,我宁愿不要走错路,而宁愿相信在此事上有一定经验的人。
在python中,有一个名为scrapy的库,以及一些更基本的库,例如将机械化或其他接口与解析器(如lxml或beautifulsoup)结合使用
在评论中提到他们没有教程,但是使用机械化相对简单(使用其浏览器对象),而lxml提供了一种使用xpath绕过dom的简便方法。
尽管我从未使用过,但硒似乎是一个不错的选择,尽管要复杂得多
几天前,我需要查找一个讨厌的HTML类的所有实例,并且很快就将以下内容放在一起-它既是爬虫,又是爬虫,而且很小。
import sys
import urllib.parse as uparse
import httplib2
from bs4 import BeautifulSoup
http = httplib2.Http()
hit_urls = set()
def crawl(url, check, do, depth=1):
global hit_urls
if url in hit_urls:
#print("**Skipping %s" % url)
return
#print("Crawling %s" % url, file=sys.stderr)
hit_urls.add(url)
_, response = http.request(url)
soup = BeautifulSoup(response)
resp = do(url, soup)
if depth > 0:
for link in soup.find_all('a'):
if link.has_key('href'):
rel_url = link['href']
if(check(rel_url)):
crawl(uparse.urljoin(url,rel_url), check, do, depth-1)
return resp
def isLocal(url):
if not url.startswith('/'):
return False
if url.startswith('/goToUrl'): # 3rd party redirect page
return False
return True
def findBadClass(url, soup):
for t in soup.find_all(True,{'class': 'badClass'}):
print(url+":"+str(t))
if __name__ == '__main__':
crawl('http://example.com', isLocal, findBadClass)
如果您只想抓取一些格式一致的网站,最简单的方法可能是将请求与正则表达式和python的内置字符串处理结合使用。
import re
import requests
resp = requests.get('http://austin.craigslist.org/cto/')
regex = ('<a href="(http://austin.craigslist.org/cto/[0-9]+\.html)">'
'([a-zA-z0-9 ]+)</a>')
for i, match in enumerate(re.finditer(regex, resp.content)):
if i > 5:
break
url = match.group(1)
print 'url:', url
resp = requests.get(url)
title = re.search('<h2>(.+)</h2>', resp.content).group(1)
print 'title:', title
body = resp.content.split('<div id="userbody">', 1)[1]
body = body.split('<script type="text/javascript">')[0]
body = body.split('<!-- START CLTAGS -->')[0]
print 'body:', body
print
编辑 :澄清一下,我使用了美丽汤,并认为它被高估了。 我认为这很奇怪而且很奇怪,在现实环境中很难使用。 此外,为一次性刮板学习一个新的库也是一项繁重的工作-您最好使用在进行python脚本编写时可以在其他地方应用的标准技术(即我在上文中建议的技术)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.