用Python来抓取网页

我想从网站上获取每日日出日落时间。 是否有可能使用Python刮取网页内容? 什么是模块使用? 有没有任何教程可用?

使用urllib2结合辉煌的BeautifulSoup库:

import urllib2 from BeautifulSoup import BeautifulSoup # or if you're using BeautifulSoup4: # from bs4 import BeautifulSoup soup = BeautifulSoup(urllib2.urlopen('http://example.com').read()) for row in soup('table', {'class': 'spad'})[0].tbody('tr'): tds = row('td') print tds[0].string, tds[1].string # will print date and sunrise 

我真的推荐Scrapy,因为在这个问题上正在阐述- “值得Scrapy学习吗? 。

从答案引用:

  • Scrapy爬行比机械化最快,因为使用asynchronous操作(在Twisted之上)。
  • Scrapy对于在libxml2之上parsing(x)html提供了更好,最快的支持。
  • Scrapy是一个完整的unicode成熟的框架,处理redirect,gzip响应,奇怪的编码,集成httpcaching等。
  • 一旦进入Scrapy,您可以在不到5分钟的时间内编写蜘蛛图片,创build缩略图并将提取的数据直接导出到csv或json。

我把从我的网页抓取工作的脚本一起收集到这个库中 。

您的案例的脚本示例:

 from webscraping import download, xpath D = download.Download() html = D.get('http://example.com') for row in xpath.search(html, '//table[@class="spad"]/tbody/tr'): cols = xpath.search(row, '/td') print 'Sunrise: %s, Sunset: %s' % (cols[1], cols[2]) 

输出:

 Sunrise: 08:39, Sunset: 16:08 Sunrise: 08:39, Sunset: 16:09 Sunrise: 08:39, Sunset: 16:10 Sunrise: 08:40, Sunset: 16:10 Sunrise: 08:40, Sunset: 16:11 Sunrise: 08:40, Sunset: 16:12 Sunrise: 08:40, Sunset: 16:13 

我强烈build议检查pyquery 。 它使用类似jquery的(又名css-like)语法,使来自这个背景的人变得非常容易。

对于你的情况,它会是这样的:

 from pyquery import * html = PyQuery(url='http://www.example.com/') trs = html('table.spad tbody tr') for tr in trs: tds = tr.getchildren() print tds[1].text, tds[2].text 

输出:

 5:16 AM 9:28 PM 5:15 AM 9:30 PM 5:13 AM 9:31 PM 5:12 AM 9:33 PM 5:11 AM 9:34 PM 5:10 AM 9:35 PM 5:09 AM 9:37 PM 

您可以使用urllib2发出HTTP请求,然后您将拥有网页内容。

你可以这样得到它:

 import urllib2 response = urllib2.urlopen('http://example.com') html = response.read() 

美丽的汤是一个Python的HTMLparsing器,应该是很好的屏幕抓取。

具体来说, 这是他们的parsingHTML文档的教程。

祝你好运!

我使用了Scrapemark (查找url-py2)和httlib2 (下载图像-py2 + 3)的组合。 scrapemark.py有500行代码,但使用正则expression式,所以可能不是那么快,没有testing。

刮你的网站的例子:

 import sys from pprint import pprint from scrapemark import scrape pprint(scrape(""" <table class="spad"> <tbody> {* <tr> <td>{{[].day}}</td> <td>{{[].sunrise}}</td> <td>{{[].sunset}}</td> {# ... #} </tr> *} </tbody> </table> """, url=sys.argv[1] )) 

用法:

 python2 sunscraper.py http://www.example.com/ 

结果:

 [{'day': u'1. Dez 2012', 'sunrise': u'08:18', 'sunset': u'16:10'}, {'day': u'2. Dez 2012', 'sunrise': u'08:19', 'sunset': u'16:10'}, {'day': u'3. Dez 2012', 'sunrise': u'08:21', 'sunset': u'16:09'}, {'day': u'4. Dez 2012', 'sunrise': u'08:22', 'sunset': u'16:09'}, {'day': u'5. Dez 2012', 'sunrise': u'08:23', 'sunset': u'16:08'}, {'day': u'6. Dez 2012', 'sunrise': u'08:25', 'sunset': u'16:08'}, {'day': u'7. Dez 2012', 'sunrise': u'08:26', 'sunset': u'16:07'}] 

我刚刚在Pycoder的Weekly上看到了RoboBrowser 。

build立在Requests和BeautifulSoup上的网页抓取库。 像机械化,但与testing,文档和Pythonic接口。

Scrapy开放源码框架将有助于在python网站报废。这个开放源代码和协作框架,用于从网站中提取您需要的数据。

networking抓取与networking索引密切相关,networking索引是利用机器人或networking爬虫在networking上索引信息,是大多数search引擎采用的通用技术。

更多关于Web Scraping

通过使用CSS Selectors器使您的生活更轻松

我知道我已经来晚了,但我有一个很好的build议。

已经build议使用BeautifulSoup我宁愿使用CSS Selectors来刮取HTML中的数据

 import urllib2 from bs4 import BeautifulSoup main_url = "http://www.example.com" main_page_html = tryAgain(main_url) main_page_soup = BeautifulSoup(main_page_html) # Scrape all TDs from TRs inside Table for tr in main_page_soup.select("table.class_of_table"): for td in tr.select("td#id"): print(td.text) # For acnhors inside TD print(td.select("a")[0].text) # Value of Href attribute print(td.select("a")[0]["href"]) # This is method that scrape URL and if it doesnt get scraped, waits for 20 seconds and then tries again. (I use it because my internet connection sometimes get disconnects) def tryAgain(passed_url): try: page = requests.get(passed_url,headers = random.choice(header), timeout = timeout_time).text return page except Exception: while 1: print("Trying again the URL:") print(passed_url) try: page = requests.get(passed_url,headers = random.choice(header), timeout = timeout_time).text print("-------------------------------------") print("---- URL was successfully scraped ---") print("-------------------------------------") return page except Exception: time.sleep(20) continue 

这里是一个简单的networking爬虫,我使用了BeautifulSoup,我们将search所有类名为_3NFO0d的链接(锚)。 我使用Flipkar.com,它是一个在线零售商店。

 import requests from bs4 import BeautifulSoup def crawl_flipkart(): url = 'https://www.flipkart.com/' source_code = requests.get(url) plain_text = source_code.text soup = BeautifulSoup(plain_text, "lxml") for link in soup.findAll('a', {'class': '_3NFO0d'}): href = link.get('href') print(href) crawl_flipkart() 

如果我们考虑从任何特定的类别获取项目的名称,那么我们可以通过使用cssselect器指定该类别的类名来实现:

 import requests ; from bs4 import BeautifulSoup soup = BeautifulSoup(requests.get('https://www.flipkart.com/').text, "lxml") for link in soup.select('div._2kSfQ4'): print(link.text) 

这是部分search结果:

 Puma, USPA, Adidas & moreUp to 70% OffMen's Shoes Shirts, T-Shirts...Under ₹599For Men Nike, UCB, Adidas & moreUnder ₹999Men's Sandals, Slippers Philips & moreStarting ₹99LED Bulbs & Emergency Lights