python抓取动态网页(博主不蛋疼时也会更新博客的哈~~)

优采云 发布时间: 2021-09-22 22:03

  python抓取动态网页(博主不蛋疼时也会更新博客的哈~~)

  我还没来得及写一点我前段时间写的东西。如果今天我的眼睛痛,我会写下来~~(结果是博客作者在没有鸡蛋痛的时候会更新他们的博客~)

  Python爬行网页基金会

  Python本身有许多与网络应用程序相关的模块,例如用于FTP相关操作的ftplib、用于发送和接收电子邮件的SMTP lib和poplib等。完全可以使用这些模块编写FTP软件或电子邮件客户端软件。我只是尝试发送和接收电子邮件,并完全使用Python脚本操作自己的FTP服务器。当然,这些都不是今天的主角。我们今天将使用的模块有:urlib、urlib2、cookielib和beautiful soup。我们先简单介绍一下。Urllib和Urllib 2自然地处理与URL相关的操作。Urllib可以从指定的URL下载文件,或者对某些字符串进行编码和解码,使其成为特定的URL字符串。Urllib 2比Urllib多一点。哦,不,它更棒一点。它有多种处理程序和处理器,可以处理更复杂的问题,如网络身份验证、使用代理服务器、使用cookie等等。第三个cookie IB,顾名思义,处理与cookie相关的操作,我没有深入讨论其他操作。最后一个包Beauty soup是一个第三方包,专门用于解析HTML和XML文件。使用它是非常傻瓜式。我们依靠它来解析网页源代码,可以从下载。当然,你也可以使用easy_uuu安装它,这里是它的中文使用文档。很多例子都很好

  让我们看一看最简单的网页捕获。事实上,网页捕获就是下载所需的网页源代码文件,然后对其进行分析,为我们自己提取有用的信息。最简单的抓取只需一句话:

  1

2

  import urllib

html_src = urllib.urlopen('http://www.baidu.com').read()

  这将打印出百度主页的HTML源代码,这仍然很容易。Urllib的urlopen函数将返回一个“class file”对象,因此您可以直接调用read()来获取内容。然而,印刷内容混乱,布局不美观,编码问题没有得到解决,所以你看不到汉字。这需要我们漂亮的汤包装。我们可以使用上面获得的源代码字符串HTML来初始化beautifulsoup对象:

  1

2

  from BeautifulSoup import BeautifulSoup

parser = BeautifulSoup(html_src)

  这样,HTML源代码的后续处理就留给解析器变量了。我们可以简单地调用解析器的prettify函数来相对美观地显示源代码,这样我们就可以看到中文字符,因为beautiful soup可以自动处理字符问题,并将返回的结果转换为Unicode编码格式。此外,beautiful soup可以快速找到满足条件的指定标记,稍后我们将使用这些标记~

  关注人人网的消息

  我们讨论了最简单的爬行情况,但通常我们需要面对更复杂的情况。例如,人人网需要登录到自己的帐户才能显示新内容,因此我们只能使用urlib2模块。想象一下,我们需要一个开场白来打开你的人人网主页。为了进入,我们首先需要身份验证,而此登录身份验证需要cookie支持,因此我们需要在此开场白上构建cookie处理程序:

  1

2

3

4

  import urllib,urllib2,cookielib

from BeautifulSoup import BeautifulSoup

myCookie = urllib2.HTTPCookieProcessor(cookielib.CookieJar());

opener = urllib2.build_opener(myCookie)

  首先导入我们需要的所有模块,然后使用urlib2模块的HTTP cookie处理器构建cookie处理程序,并将cookie IB模块的cookie jar函数作为参数传入。此函数用于处理HTTP cookies。简而言之,它从HTTP请求中提取cookie并将它们返回给HTTP响应。然后使用urlib2_uuOpener的构建来创建我们需要的Opener。此开启器已满足我们处理cookies的要求

  那么这个处理器是如何工作的呢?如前所述,它需要捕获HTTP请求。也就是说,我们需要知道登录时发送了哪些数据包。令人敬畏的人可以使用各种命令行数据包捕获工具,如tcpdump。让我们等待晓敏的到来。在这里,我们借助Firefox的httpfox实现它。你可以在这里添加这个很棒的插件。安装插件后,我们使用Firefox登录人人网,然后输入帐户和密码。然后,不要担心,不要按登录按钮,从状态栏打开httpfox插件,单击开始按钮开始捕获数据包,然后单击人人网的登录。登录过程完成后,单击httpfox停止捕获数据包,如果一切正常,您应该看到以下信息

  

  

  我们可以看到,在登录人人网的过程中,浏览器向人人网的服务器发送post请求数据。共有四项,其中两项是您的帐户和密码。让我们使用代码模拟来提出相同的请求

  1

2

3

4

5

6

7

8

9

  post_data = {

'email':'xxxxx',

'password':'xxxxx',

'origURL':'http://www.renren.com/Home.do',

'domain':'renren.com'

}

req = urllib2.Request('http://www.renren.com/PLogin.do', urllib.urlencode(post_data))

html_src = openner.open(req).read()

parser = BeautifulSoup(html_src)

  首先,构造一个字典来存储我们刚刚捕获的post数据,然后通过urllib 2的请求类自己构造一个“request”对象。请求的提交URL是上面捕获的post请求的URL部分,后面是我们的post数据。注意,我们需要使用urllib的URLEncode方法在这里重新编码,使其成为合法的URL字符串。下面的过程与上面提到的简单爬网过程相同,只是这里打开的不是简单的web地址,而是封装web地址和post数据后的请求。类似地,我们将源代码分配给beautifulsoup以供以后处理

  现在,我们在解析器中存储的是收录来自朋友的新闻的网页源代码。我们如何提取有用的信息?分析网页的粗略工作应该交给Firefox的firebug(在这里下载)。登录人人网,任意右键点击新闻中某人的状态,选择“查看元素”,弹出如下窗口,显示您点击的部分对应的源代码:

  

  我们可以看到,每个新事件都对应于article标记。让我们仔细看看文章标签的细节:

  

  里面的H3标签收录朋友的姓名和状态。当然,肥猪流也有一些表达地址。那些接触过HTML的人应该对此很熟悉。这就是我们要抓到的H3

  Beautifulsoup抓取标签内容

  下面是我们的解析器展示它的时候了。Beautifulsoup提供了许多定位标记的方法。简而言之,它主要包括find函数和findall函数。常用参数是name和attrs。一个是标记的名称,另一个是标记的属性,名称是字符串,attrs是字典,例如find('img'),{'SRC':'abc.JPG'})将返回如下标签:

  

  find和findall之间的区别在于find只返回满足要求的第一个标记,而findall返回满足要求的所有标记的列表。在获得标签后,有许多方便的方法来获得子标签。例如,标签。A可以通过点运算符获取由tag表示的标记下的子标记A,然后tag.contents可以获取其所有子标记。对于更多应用程序,您可以查看其文档。让我们以这个例子来了解如何捕获我们想要的内容

  1

2

3

4

5

6

7

8

9

10

11

  article_list = parser.find('div','feed-list').findAll('article')

for my_article in article_list:

state = []

for my_tag in my_article.h3.contents:

factor = my_tag.string

if factor != None:

factor = factor.replace(u'\xa0','')

factor = factor.strip(u'\r\n')

factor = factor.strip(u'\n')

state.append(factor)

print ' '.join(state)

  这里,我们使用find('div','feedlist')。Findall('article')获取其类属性为提要列表的div标记。当第二个参数直接是字符串时,它表示CSS的class属性,然后获取所有文章的列表。与上图相比,这句话实际上得到了所有新事物的列表。然后我们遍历这个列表,为每个文章标记获取其H3标记,并提取内部信息。如果标签直接收录文本,则可以通过string属性获取。最后,我们删除了一些控制字符,例如换行符。最后,我们打印结果。当然,这只能获得一小部分,“更多新事物”的功能是无法实现的。如果你感兴趣,继续学习。我认为通过httpfox实现并不困难

  

  团购信息聚合小工具

  有了同样的知识,我们还可以做一些有趣的应用,比如流行的团购信息聚合。其实这个想法还是很简单的,就是分析网站源代码,提取团购标题、图片和价格。在这里,我们发布了源代码文件,有兴趣的人可以研究它!pyqt制作的界面中的按钮功能尚未实现,因此我们只能将其提取为“美团”、“”和“团购”网站,可通过下拉列表框选择显示。图片将保存在本地目录中。让我们拍一张截图~

  

  未实现交叉按钮功能。这是文件下载,一个PYW主表单文件,另外两个py文件,一个是UI,另一个是resource

  软件包下载

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线