,,python3制作捧腹网段子页爬虫

,,python3制作捧腹网段子页爬虫

与python2相比,大多数在线Python教程都是2.X版本。x和python3。x,变化挺大的,很多库的用法都不一样。我安装了Python 3.x,我们来看看详细的例子。

0x01

春节闲着的时候(有多闲),我写了一个简单的程序,看一些笑话,记录下写程序的过程。第一次接触爬虫是在看了这样一个帖子之后,一个调侃的帖子,在煎蛋网上抓取了妹妹的照片。简直不太方便。于是我把老虎画成猫,抓了几张图。

启迪科技未来。作为一个程序员,怎么能做这样的事情?爬一些段子对你的身心健康比较好。

0x02

在我们挽起袖子开始之前,先普及一些理论知识。

简单来说,我们要下拉网页上特定位置的内容。具体怎么拉?我们要先分析这个网页,看看内容是不是我们需要的。比如这次我们在爆笑网上抓取的段子。打开爆笑网络子页面可以看到很多段子。我们的目的是获得这些内容。看完冷静一下。你再这么笑下去我们就写不出代码了。在chrome中,我们打开review元素,然后逐层展开HTML标签,或者点击小鼠标定位我们需要的元素。

最后可以发现div中的内容就是我们需要的笑话,看第二个笑话也是如此。这样一来,我们就可以找到这个网页中所有的div,然后把里面的内容提取出来,就完成了。

0x03

好了,现在我们知道了我们的目的,我们可以卷起袖子开始工作了。我这里用python3。你可以决定python2和python3的选择,功能都可以实现,但是有一些区别。但还是推荐python3。

要下拉我们需要的内容,首先我们要下拉这个网页。怎么会?这里,我们需要使用一个名为urllib的库。我们使用这个库提供的方法来获取整个网页。

首先,我们导入urllib。

复制代码如下:将urllib.request作为请求导入

然后,我们可以使用请求来获取网页,

复制代码如下:def getHTML(url):

return request.urlopen(url)。阅读()

人生苦短,我用python,一行代码,下载网页。告诉我,有什么理由不用python?

下载完网页后,我们必须解析网页以获得我们需要的元素。为了解析元素,我们需要使用另一个叫做Beautiful Soup的工具,它可以快速解析HTML和XML,得到我们需要的元素。

复制代码如下:SOUP=Beautifully SOUP(GetHTML(' 3358 www.pengfu.com/xiaohua _ 1 . html '))

使用BeautifulSoup解析网页只是一句话,但是当你运行代码的时候,会有这样的警告,提示你应该指定一个解析器,否则可能会在其他平台或者系统报错。

复制代码如下:/library/frameworks/python . framework/versions/3.5/lib/python 3.5/site-packages/bs4/_ _ init _ _。py:181: UserWarning:没有明确指定解析器,所以我使用了这个系统最好的HTML解析器(' lxml ')。这通常不是问题,但是如果您在另一个系统上或者在不同的虚拟环境中运行这段代码,它可能会使用不同的解析器并且表现不同。

导致此警告的代码位于joke.py文件的第64行。要消除此警告,请更改如下所示的代码:

beautiful soup([您的标记])

对此:

beautiful soup([您的标记],' lxml ')

标记类型=标记类型))

解析器的类型以及不同解析器之间的区别在官方文档中有详细解释。目前使用lxml进行解析比较靠谱。

修改后

复制代码如下:SOUP=Beautifully SOUP(GetHTML(' 3358 www.pengfu.com/xiaohua _ 1 . html ',' LXML '))

这样,就没有这样的警告了。

复制代码如下:div _ array=soup.find _ all ('div ',{ ' class ':' content-img clear fix pt 10 relative ' })

利用查找全部函数,来找到所有class=content-img clearfix pt10相对的差异标签然后遍历这个数组

复制代码代码如下:for x in div _ array:content=x . string

这样,我们就取到了目的差异的内容。至此,我们已经达到了我们的目的,爬到了我们的笑话。

但当以同样的方式去爬取糗百的时候,会报这样一个错误

复制代码代码如下:引发RemoteDisconnected('没有http.client.RemoteDisconnected的远程端关闭连接:没有响应的远程端关闭连接

说远端无响应,关闭了链接,看了下网络也没有问题,这是什么情况导致的呢?莫非是我姿势不对?

打开查尔斯抓包,果然也没反应。唉,这就奇怪了,好好的一个网站,怎么浏览器可以访问,python无法访问呢,是不是美国联合航空公司(联合航空公司)的问题呢?看了下查尔斯,发现,利用urllib发起的请求,UA默认是Python-urllib/3.5而在铬中访问美国联合航空公司(联合航空公司)则是用户代理:Mozilla/5.0(麦金塔;英特尔Mac OS X 10 _ 12 _ 3)苹果WebKit/537.36(KHTML像壁虎一样)Chrome/56。0 .2924 .87 Safari/537.36、那会不会是因为服务器根据美国联合航空公司(联合航空公司)来判断拒绝了大蟒爬虫。我们来伪装下试试看行不行

复制代码代码如下:def getHTML(url):

headers={'User-Agent ':'用户代理:Mozilla/5.0(麦金塔;英特尔Mac OS X 10 _ 12 _ 3)苹果WebKit/537.36(KHTML像壁虎一样)Chrome/56。0 .2924 .87 Safari/537.36 ' }

请求=请求。请求(网址,头=头)

return request.urlopen(req).阅读()

这样就把大蟒伪装成铬去获取糗百的网页,可以顺利的得到数据。

至此,利用大蟒爬取糗百和捧腹网的笑话已经结束,我们只需要分析相应的网页,找到我们感兴趣的元素,利用大蟒强大的功能,就可以达到我们的目的,不管是亲亲抱抱的图,还是内涵段子,都可以一键搞定,不说了,我去找点妹子图看看。

# -*-编码:utf-8 -*-

导入系统

将urllib.request作为请求导入

从bs4导入美丽的声音

def getHTML(url):

headers={'User-Agent ':'用户代理:Mozilla/5.0(麦金塔;英特尔Mac OS X 10 _ 12 _ 3)苹果WebKit/537.36(KHTML像壁虎一样)Chrome/56。0 .2924 .87 Safari/537.36 ' }

请求=请求。请求(网址,头=头)

return request.urlopen(req).阅读()

定义获取_付鹏_结果(网址):

soup=BeautifulSoup(getHTML(url),' lxml ')

返回soup.find_all('div ',{ ' class ':' content-img clear fix pt10 relative ' })

def get _付鹏_笑话():

对于范围(1,2)中的x:

URL=' http://www。彭福。com/Xiaohua _ % d . html“% x

对于获取付鹏结果(网址)中的x:

content=x.string

尝试:

string=content.lstrip()

打印(字符串\n\n ')

除了:

继续

返回

def get_qiubai_results(网址):

soup=BeautifulSoup(getHTML(url),' lxml ')

contents=soup.find_all('div ',{'class':'content'})

restlus=[]

对于内容中的x:

str=x.find('span ').getText('\n ',' br/')

restlus.append(str)

返回雷斯图斯

def get_qiubai_joke():

对于范围(1,2)中的x:

网址='http://www.qiushibaike.com/8hr/page/%d/?s=4952526"% x "

对于get _秋白_结果中的x(网址):

打印(x '\n\n ')

返回

if __name__=='__main__ ':

获取_付鹏_笑话()

get_qiubai_joke()

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: