python自动化之web抓取

‘‘‘

从web抓取数据:

webbrowser:是python自带的,打开浏览器获取指定页面.

requests:从因特网上下载文件和网页.

Beautiful Soup:解析HTML,即网页编写的格式.

selenium:启动并控制一个Web浏览器.selenium能够填写表单,并模拟鼠标在这个浏览器中点击

‘‘‘

import webbrowser

webbrowser.open(‘http://inventwithpython.com/‘)

‘‘‘

利用requests模块从Web下载文件:

requests模块让你很容易从Web下载文件,不必担心一些复杂的问题,

诸如网络错误、连接问题和数据压缩

‘‘‘

###################################用requests.get()下载一个网页####################################

import requests

res=requests.get(‘http://www.gutenberg.org/cache/epub/1112/pg1112.txt‘)

type(res)

res.status_code=requests.codes.ok

‘‘‘

检查Response对象的status_code属性,等于requests.codes.ok时表示一切都好

(HTTP协议中"OK"的状态码是200,404状态码表示"没找到")

‘‘‘

len(res.text)

print(res.text[:250])

###################################检查下载错误####################################

import requests

res=requests.get(‘http://inventwithpython.com/page_that_does_not_exist‘)

res.raise_for_status()     ####下载成功了,就什么也不做;下载出错,就抛出异常

##############################################

import requests

res=requests.get(‘http://inventwithpython.com/page_that_does_not_exist‘)

try:

res.raise_for_status()

except Exception as exc:

print(‘There was a problem:%s‘%(exc))

###################################将下载的文件保存到硬盘####################################

import requests

res=requests.get(‘http://www.gutenberg.org/cache/epub/1112/pg1112.txt‘)

res.raise_for_status()

playFile=open(r‘C:\Users\Administrator\Desktop\RomeoAndJuliet.txt‘,‘wb‘)

for chunk in res.iter_content(100000):  ###每次循环迭代的字节数

print len(chunk)

playFile.write(chunk)

playFile.close()

###################################学习HTML的资源####################################

‘‘‘

HTML初学者指南:

http://htmldog.com/guides/html/beginner/

http://www.codecademy.com/tracks/web/

https://developer.mozilla.org/en-US/learn/html

‘‘‘

######HTML快速复习

<strong>Hello</strong>world!  #####<strong>表明:标签包围的文本将使用粗体

Al‘‘s free <a href="http://inventwithpython.com">Python books</a>

###################################查看网页的HTML源代码####################################

‘‘‘

在网页任意位置点击右键:选择View Source或View page source

查看该页的HTML文本

‘‘‘

‘‘‘

在Windows版的Chrome和IE中,开发者工具已经安装了,可以按下F12,出现;

再次按下F12,可以让开发者工具消失

‘‘‘

‘‘‘

不要用正则表达式来解析HTML:

尝试用正则表达式来捕捉HTML格式的变化,非常繁琐,容易出错

专门用于解析HTML的模块,诸如Beautiful Soup,将更不容易导致缺陷

http://stackoverflow.com/a/1732454/1893164/

‘‘‘

###################################使用开发者工具来寻找HTML元素####################################

‘‘‘

http://weather.gov/

邮政编码为94105

通过开发者工具,找到对应代码

‘‘‘

###################################从HTML创建一个BeautifulSoup对象####################################

import requests,bs4

res=requests.get(‘http://forecast.weather.gov/MapClick.php?lat=37.78833550000007&lon=-122.39552170000002#.WXazEmP9c_0‘)

res.raise_for_status()

noStarchSoup=bs4.BeautifulSoup(res.text)

type(noStarchSoup)

playFile=open(r‘C:\Users\Administrator\Desktop\rest.html‘,‘wb‘)

for chunk in res.iter_content(100000):  ###每次循环迭代的字节数

print len(chunk)

playFile.write(chunk)

playFile.close()

###################################用select()方法寻找元素####################################

‘‘‘

传递给select()方法的选择器                           将匹配...

soup.select(‘div‘)                                           所有名为<div>的元素

soup.select(‘#author‘)                                 带有id属性为author的元素

soup.select(‘.notice‘)                                   所有使用CSS class属性名为notice的元素

soup.select(‘div span‘)                                 所有在<div>元素之内的<span>元素

soup.select(‘div > span‘)                    所有直接在<div>元素之内的<span>元素,中间没有其他元素

soup.select(‘input[name]‘)                         所有名为<input>,并有一个name属性,其值无所谓的元素

soup.select(‘input[type="button"]‘) 所有名为<input>,并有一个type属性,其值为button的元素

‘‘‘

<div id="current_conditions-summary" class="pull-left">

<p class="myforecast-current">NA</p>

<p class="myforecast-current-lrg">60°F</p>

<p class="myforecast-current-sm">16°C</p>

</div>

<div id="comic">

<img src="//imgs.xkcd.com/comics/barrel_cropped_(1).jpg" title="Don't we all." alt="Barrel - Part 1" />

</div>

import bs4

exampleFile=open(r‘C:\Users\Administrator\Desktop\rest.html‘)

exampleSoup=bs4.BeautifulSoup(exampleFile.read())

elems=exampleSoup.select(‘#current_conditions-summary‘)

type(elems)

len(elems)

type(elems[0])

elems[0].getText()

>>> elems[0].getText()

u‘\nNA\n59\xb0F\n15\xb0C\n‘

>>> str(elems[0])

‘<div class="pull-left" id="current_conditions-summary">\n<p class="myforecast-current">NA</p>\n<p class="myforecast-current-lrg">59\xc2\xb0F</p>\n<p class="myforecast-current-sm">15\xc2\xb0C</p>\n</div>‘

>>> >>> elems[0].attrs

{‘id‘: ‘current_conditions-summary‘, ‘class‘: [‘pull-left‘]}

#########################

pElems=exampleSoup.select(‘p‘)

>>> pElems[1]

<p>Your local forecast office is</p>

>>> pElems[2]

<p>

Severe thunderstorms will be possible over portions of the upper Midwest and Great Lakes Tuesday, Wednesday, and Thursday. Damaging winds, large hail, and heavy rainfall possible. Over the Desert Southwest and portions of the Rockies, Monsoonal moisture will lead to locally heavy rainfall and the threat for flash flooding into midweek.

<a href="http://www.wpc.ncep.noaa.gov/discussions/hpcdiscussions.php?disc=pmdspd" target="_blank">Read More &gt;</a>

</p>

>>> pElems[1].getText()

u‘Your local forecast office is‘

###################################通过元素的属性获取数据####################################

import bs4

soup=bs4.BeautifulSoup(open(r‘C:\Users\Administrator\Desktop\rest.html‘))

spanElem=soup.select(‘span‘)[0]

>>> str(spanElem)

‘<span class="sr-only">Toggle navigation</span>‘

>>> spanElem.get(‘class‘)

[‘sr-only‘]

>>> spanElem.attrs

{‘class‘: [‘sr-only‘]}

>>> spanElem.get(‘id‘)==None

True

###################################用selenium模块控制浏览器####################################

###################################启动selenium控制的浏览器####################################

#####下载:http://getfirefox.com/

from selenium import webdriver

browser=webdriver.Firefox()

type(browser)

browser.get(‘http://inventwithpython.com‘)

###################################maplt.py####################################

import webbrowser,sys,pyperclip

if len(sys.argv)>1:

###Get address from command line:

address=‘ ‘.join(sys.argv[1:])

else:

address=pyperclip.paste()

webbrowser.open(‘https://www.google.com/maps/place/‘+address)

时间: 2024-10-16 19:14:27

python自动化之web抓取的相关文章

【python】从web抓取信息

能打开浏览器的模块webbrowser,它的open函数可以做一些有意思的事情.例如从sys.argv或者剪切板读入地址,然后直接在Google地图打开相应的地图页面. import webbrowser #python模块,非第三方模块,不需要下载,直接使用 import pyperclip #第三方模块 #启用电脑默认的浏览器打开网页 address = pyperclip.paste() webbrowser.open('http://www.google.cn/maps/place/'+

python Web抓取(一)

需要的模块: python web抓取通过: webbrowser:是python自带的,打开浏览器获取指定页面 requests:从因特网上下载文件和网页 Beautiful Soup:解析HTML Selenium:启动并控制一个Web浏览器.selenium能够填写表单,并模拟鼠标在这个浏览器中点击   >>>这个在这里 一.项目:利用Webbrowser模块的快速翻译脚本  webbrowser.open(url) 会在默认浏览器中打开这个地址 >>> impo

从web抓取信息

"web抓取"是一个术语,即利用程序下载并处理来自web的内容. ▎在python中,有几个模块能让抓取网页变得很容易. webbrowser:python自带,打开游览器获取指定页面. requests:从因特网上下载文件和网页. Beautiful Soup:解析HTML,即网页编写的格式. selenium:启动并控制一个web游览器.selenium能够填写表单,并模拟鼠标在这个游览器中点击. webbrowser模块 webbrowser模块的open()函数可以启动一个新游

别人家的程序员是如何使用 Java 进行 Web 抓取的?

Web抓取非常有用,它可以收集信息供多种用途使用,如数据分析.统计.提供第三方信息,还可以给深神经网络和深度学习提供数据. Web抓取是什么? 有一种非常广泛的误解,人们似乎把Web抓取和Web爬虫当成了同一种东西.所以我们先明确这一点. 两者有个非常显著的区别: Web爬虫,指搜索或"爬"网页以获得任意信息的过程.通常是搜索引擎如Google.Yahoo或Bing的功能,以便给我们显示搜索结果. Web抓取,指从特定的网站上利用特别定制的自动化软件手机信息的过程. 注意! 尽管Web

python&amp;amp;php数据抓取、爬虫分析与中介,有网址案例

近期在做一个网络爬虫程序.后台使用python不定时去抓取数据.前台使用php进行展示 站点是:http://se.dianfenxiang.com

python爬虫CSDN文章抓取

CSDN原则上不让非人浏览访问,正常爬虫无法从这里爬取文章,需要进行模拟人为浏览器访问. 使用:输入带文章的CSDN链接自动生成正文的HTML,文件名为标题名 #!/usr/bin/env python # coding=utf-8 ######################################### #> File Name: CSDN_article.py #> Author: nealgavin #> Mail: [email protected] #> Cre

python的post请求抓取数据

python通过get方式,post方式发送http请求和接收http响应-urllib urllib2 python通过get方式,post方式发送http请求和接收http响应-- import urllib模块,urllib2模块, httplib模块 http://blog.163.com/[email protected]/blog/static/132229655201231085444250/ 测试用CGI,名字为test.py,放在apache的cgi-bin目录下:#!/usr

python抓取数据,python使用socks代理抓取数据

在python中,正常的抓取数据直接使用urllib2 这个模块: import urllib2 url = 'http://fanyi.baidu.com/' stream = urllib2.urlopen(url) cont = stream.read() print cont 如果要走http代理的话,我们也可以使用urllib2,不需要引用别的模块: import urllib2 url = 'https://clients5.google.com/pagead/drt/dn/dn.j

Python开发网络爬虫抓取某同城房价信息

前言: 苦逼的我从某某城市换到另一个稍微大点的某某城市,面临的第一个问题就是买房,奋斗10多年,又回到起点,废话就不多说了,看看如何设计程序把某同城上的房价数据抓取过来. 方案:方案思路很简单,先把网页内容获取下来,通过一定规则对内容解析,保存成想要的格式 难点是对网页的解析,是一个比较细致的活,必须边输出,边调试. 具体实现: 获取网页内容: def get_page(url):    headers = {        'User-Agent': r'Mozilla/5.0 (Window