Python爬虫:爬取糗事百科

网上看到的教程,但是是用正则表达式写的,并不能运行,后面我就用xpath改了,然后重新写了逻辑,并且使用了双线程,也算是原创了吧#!/usr/bin/python# -*- encoding:utf-8 -*-

from lxml import etreefrom multiprocessing.dummy import Pool as ThreadPoolimport requestsimport sys#编码reload(sys)sys.setdefaultencoding(‘utf-8‘)

#定义输出函数def towrite(contentdict):    f.writelines(u‘作者:‘ + contentdict[‘author‘] + ‘\n‘)    f.writelines(u‘内容:‘ + contentdict[‘content‘] + ‘\n‘)    f.writelines(u‘好笑:‘ + contentdict[‘vote‘] + ‘\n‘)    f.writelines(u‘评论:‘ + contentdict[‘span‘] + ‘\n\n‘)

def spider(url):    #得到页面代码    user_agent = ‘Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)‘    headers = { ‘User-Agent‘ : user_agent }    html = requests.get(url,headers=headers)

    #获取内容    selector = etree.HTML(html.text)    content_field = selector.xpath(‘//*[@id="content-left"]/div[@class="article block untagged mb15"]‘)    item={}    for i in range(len(content_field)):        #作者        author_f= content_field[i].xpath(‘div[@class="author clearfix"]‘)[0]        author=author_f.xpath(‘string(.)‘).replace(‘\n‘,‘‘).replace(‘ ‘,‘‘)        #内容        content_f=content_field[i].xpath(‘div[@class="content"]/text()‘)        content=‘‘        for n in range(len(content_f)):            content_temp=content_f[n].replace(‘\n‘,‘‘).replace(‘ ‘,‘‘).replace(‘\t‘,‘‘)            content+=str(content_temp)

        #好笑        vote=‘‘        vote_temp= content_field[i].xpath(‘div[@class="stats"]/span[@class="stats-vote"]/i/text()‘)[0]        vote+=str(vote_temp)

        #评论,如果评论为空,则不会显示i节点        span=‘‘        span_temp_l= content_field[i].xpath(‘div[@class="stats"]/span[@class="stats-comments"]/a/i/text()‘)        span_temp=[]        if len(span_temp_l)>0:            span_temp=span_temp_l[0]        else:            span_temp=‘0‘        span+=str(span_temp)

        item[‘author‘] = author        item[‘content‘] = content        item[‘vote‘] = vote        item[‘span‘] = span

        towrite(item)

if __name__ == ‘__main__‘:    pool = ThreadPool(4)    f = open(‘content.txt‘,‘a‘)    url = []    for i in range(1,36):        newpage = ‘http://www.qiushibaike.com/hot/page/‘ + str(i)        url.append(newpage)

    results = pool.map(spider, url)    pool.close()    pool.join()    f.close()
时间: 2024-10-03 04:16:48

Python爬虫:爬取糗事百科的相关文章

Python爬虫爬取糗事百科段子内容

参照网上的教程再做修改,抓取糗事百科段子(去除图片),详情见下面源码: #coding=utf-8#!/usr/bin/pythonimport urllibimport urllib2import reimport threadimport timeimport sys #定义要抓取的网页#url = 'http://www.qiushibaike.com/hot/'#读取要抓取的网页#globalcontent = urllib.urlopen(url).read()#抓取段子内容#new_

Python爬虫-爬取糗事百科段子

闲来无事,学学python爬虫. 在正式学爬虫前,简单学习了下HTML和CSS,了解了网页的基本结构后,更加快速入门. 1.获取糗事百科url http://www.qiushibaike.com/hot/page/2/    末尾2指第2页 2.先抓取HTML页面 import urllib import urllib2 import re page = 2 url = 'http://www.qiushibaike.com/hot/page/' + str(page) #对应第2页的url

Python爬虫--抓取糗事百科段子

今天使用python爬虫实现了自动抓取糗事百科的段子,因为糗事百科不需要登录,抓取比较简单.程序每按一次回车输出一条段子,代码参考了 http://cuiqingcai.com/990.html 但该博主的代码似乎有些问题,我自己做了修改,运行成功,下面是代码内容: 1 # -*- coding:utf-8 -*- 2 __author__ = 'Jz' 3 import urllib2 4 import re 5 6 #糗事百科爬虫类 7 class QSBK: 8 #初始化 9 def __

python3 爬虫---爬取糗事百科

这次爬取的网站是糗事百科,网址是:http://www.qiushibaike.com/hot/page/1 分析网址,参数'page/'后面的数字'1'指的是页数,第二页就是'/page/2',以此类推... 一.分析网页 网页图片 然后明确要爬取的元素:作者名.内容.好笑数.以及评论数量 每一个段子的信息存放在'div id="content-left"'下的div中 爬取元素的所在位置 二.爬取部分 工具: Python3 requests xpath 1.获取每一个段子 1 #

爬虫 爬取糗事百科热门板块的信息

分析: 1.先查看返回的内容是否与显示的内容一样 2.再看页数的变化,每次会加一,总共13页,因此可以一次性构造地址列表 3.因此可直接结合 chrome插件 xpath helper 与 elemetns显示的内容进行定位要爬取的内容 用到的模块 requests+json+lxml+xpath 下面是代码: import requests import json from lxml import etree class QiubaiSpider: def __init__(self): se

python beautifulsoup bs4爬虫 爬取糗事百科

声明:仅用于学习语法,请勿用于非法用途 import urllib.request import re from bs4 import BeautifulSoup # -*- coding:utf-8 -*- url = 'http://www.qiushibaike.com/hot/' user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers={'User-Agent':user_agent} request = u

使用Python爬取糗事百科热门文章

默认情况下取糗事百科热门文章只有35页,每页20条,根据下面代码可以一次性输出所有的文章,也可以选择一次输出一条信息,回车继续.不支持图片内容的显示,显示内容包括作者,热度(觉得好笑的人越多,热度越高),内容.从热度最高开始显示到最低.实现代码如下: #!/usr/bin/python #coding:utf8 """ 爬取糗事百科热门文章 """ import urllib2 import re #模拟浏览器访问,否则无法访问 user_age

python3 爬虫之爬取糗事百科

闲着没事爬个糗事百科的笑话看看 python3中用urllib.request.urlopen()打开糗事百科链接会提示以下错误 http.client.RemoteDisconnected: Remote end closed connection without response 但是打开别的链接就正常,很奇怪不知道为什么,没办法改用第三方模块requests,也可以用urllib3模块,还有一个第三方模块就是bs4(beautifulsoup4) requests模块安装和使用,这里就不说

python爬取糗事百科段子

初步爬取糗事百科第一页段子(发布人,发布内容,好笑数和评论数) 1 #-*-coding:utf-8-*- 2 import urllib 3 import urllib2 4 import re 5 page = 1 6 url ='http://www.qiushibaike.com/hot/page/'+str(page) #第一页URL 7 headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/

爬虫实战 爬取糗事百科

偶然看到了一些项目,有爬取糗事百科的,我去看了下,也没什么难的 首先,先去糗事百科的https://www.qiushibaike.com/text/看一下, 先检查一下网页代码, 就会发现,需要爬取的笑话内容在一个span标签里,而且父标签是class为content的div里,那就很简单了,用select方法,先找到该文件,然获取下来并保存在txt文件里.比较枯燥. 直接贴代码吧 from bs4 import BeautifulSoup import lxml import request