当前位置:首页 » 编程语言 » python爬取文章

python爬取文章

发布时间: 2023-04-06 10:08:20

Ⅰ 如何用python写爬虫来获取网页中所有的文章以及关键词

所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。
类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求的内容发送到服务器端, 然后读取服务器端的响应资源。

在Python中,我们使用urllib2这个组件来抓取网页。
urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。

它以urlopen函数的形式提供了一个非常简单的接口。

最简单的urllib2的应用代码只需要四行。

我们新建一个文件urllib2_test01.py来感受一下urllib2的作用:

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

按下F5可以看到运行的结果:

我们可以打开网络主页,右击,选择查看源代码(火狐OR谷歌浏览器均可),会发现也是完全一样的内容。

也就是说,上面这四行代码将我们访问网络时浏览器收到的代码们全部打印了出来。

这就是一个最简单的urllib2的例子。

除了"http:",URL同样可以使用"ftp:","file:"等等来替代。

HTTP是基于请求和应答机制的:

客户端提出请求,服务端提供应答。

urllib2用一个Request对象来映射你提出的HTTP请求。

在它最简单的使用形式中你将用你要请求的地址创建一个Request对象,

通过调用urlopen并传入Request对象,将返回一个相关请求response对象,

这个应答对象如同一个文件对象,所以你可以在Response中调用.read()。

我们新建一个文件urllib2_test02.py来感受一下:

import urllib2
req = urllib2.Request('http://www..com')
response = urllib2.urlopen(req)
the_page = response.read()
print the_page

可以看到输出的内容和test01是一样的。

urllib2使用相同的接口处理所有的URL头。例如你可以像下面那样创建一个ftp请求。

req = urllib2.Request('ftp://example.com/')

在HTTP请求时,允许你做额外的两件事。

1.发送data表单数据

这个内容相信做过Web端的都不会陌生,

有时候你希望发送一些数据到URL(通常URL与CGI[通用网关接口]脚本,或其他WEB应用程序挂接)。

在HTTP中,这个经常使用熟知的POST请求发送。

这个通常在你提交一个HTML表单时由你的浏览器来做。

并不是所有的POSTs都来源于表单,你能够使用POST提交任意的数据到你自己的程序。

一般的HTML表单,data需要编码成标准形式。然后做为data参数传到Request对象。

编码工作使用urllib的函数而非urllib2。

我们新建一个文件urllib2_test03.py来感受一下:

import urllib
import urllib2
url = 'http://www.someserver.com/register.cgi'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' }
data = urllib.urlencode(values) # 编码工作
req = urllib2.Request(url, data) # 发送请求同时传data表单
response = urllib2.urlopen(req) #接受反馈的信息
the_page = response.read() #读取反馈的内容

如果没有传送data参数,urllib2使用GET方式的请求。

GET和POST请求的不同之处是POST请求通常有"副作用",

它们会由于某种途径改变系统状态(例如提交成堆垃圾到你的门口)。

Data同样可以通过在Get请求的URL本身上面编码来传送。

import urllib2
import urllib
data = {}
data['name'] = 'WHY'
data['location'] = 'SDU'
data['language'] = 'Python'
url_values = urllib.urlencode(data)
print url_values
name=Somebody+Here&language=Python&location=Northampton
url = 'http://www.example.com/example.cgi'
full_url = url + '?' + url_values
data = urllib2.open(full_url)

这样就实现了Data数据的Get传送。

2.设置Headers到http请求

有一些站点不喜欢被程序(非人为访问)访问,或者发送不同版本的内容到不同的浏览器。

默认的urllib2把自己作为“Python-urllib/x.y”(x和y是Python主版本和次版本号,例如Python-urllib/2.7),

这个身份可能会让站点迷惑,或者干脆不工作。

浏览器确认自己身份是通过User-Agent头,当你创建了一个请求对象,你可以给他一个包含头数据的字典。

下面的例子发送跟上面一样的内容,但把自身模拟成Internet Explorer。

(多谢大家的提醒,现在这个Demo已经不可用了,不过原理还是那样的)。

import urllib
import urllib2
url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'name' : 'WHY',
'location' : 'SDU',
'language' : 'Python' }
headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()

以上就是python利用urllib2通过指定的URL抓取网页内容的全部内容,非常简单吧,希望对大家能有所帮助。

Ⅱ 微信公众号及服务号文章爬取

使用Python爬取公众号文章主要两种方法:

微信传送门已被封杀,现存可用的是搜狗微信搜索,2013年腾讯以39.2%的持股和52.3%的投票权,成为搜狗第一大股东,2020年腾讯全资147亿收购搜狗,可以说搜狗已是腾讯的样子,而自2013年开始搜狗搜索就接入了微信公众号数据,因此实际上也能看做第一方的搜索接口。

域名: https://weixin.sogou.com/

可以直接搜索公众号或文章关键字获取数据,但是此方法有个比较大的问题,只能搜索公众号内容,而很多公众号其实是服务号,服务号使用此方法是搜索不到任何数据的,因此需要另一种方式进行爬取。

这个接口无法稿升匿名访问,因此需要注册一个公众号进行操作
具体操作步骤:登录微信公众号,首页选择创作 图文消息 ,在编辑工具栏找到 超链接 ,在公众号一栏 选择其他公众号 ,之后输入需要获取的公众号名字进行搜索就会出现相匹配的公众号列表,最后点击所需公众号,就会以时间倒序方式显示具体文章列表,如下图:

返回数据格式,如下图:

爬取原理基本就结束了,具体接口分析过程较为简单就不列了。

由于微信公众平台登录验证较为严格,登陆时还需要进行收集扫码确认,因此确认最终使用 selenium 自动键稿老化进行登录获取 cookies 及 token 的工作,访问接口则使用 requests ,而因为详细文章数据是js动态加载出来,因敬段此在这里依然选择通过 selenium 自动化获取页面,之后就可以通过xpath等方法获得文章内容。

资料查询中有网友称,此接口有访问频次限制,最少的出现过爬200篇文章就被封的现象,因此频率最好尽可能设置一个较大范围的随机数,且控制频率不要过多,代理无用,因为你是需要登录进行操作的。[手动狗头]

源码我想着放上来太长了,如需请留言。

Ⅲ python怎么抓取微信阅

抓取微信公众号的文章

一.思路分析

目前所知晓的能够抓取的方法有:

1、微信APP中微信公众号文章链接的直接抓取(http://mp.weixin.qq.com/s?__biz=MjM5MzU4ODk2MA==&mid=2735446906&idx=1&sn=&scene=0#rd)


2、通过微信合作方搜狗搜索引擎(http://weixin.sogou.com/),发送相应请求来间接抓取

第1种方法中,这种链接不太好获取,而且他的规律不是特别清晰。

因此本文采用的是方法2----通过给 weixin.sogou.com 发送即时请求来实时解析抓取数据并保存到本地。

二.爬取过程

1、首先在搜狗的微信搜索页面测试一下,这样能够让我们的思路更加清晰


在搜索引擎上使用微信公众号英文名进行“搜公众号”操作(因为公众号英文名是公众号唯一的,而中文名可能会有重复,同时公众号名字一定要完全正确,不然可能搜到很多东西,这样我们可以减少数据的筛选工作,只要找到这个唯一英文名对应的那条数据即可),即发送请求到'http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&_sug_=n&_sug_type_= ' % 'python',并从页面中解析出搜索结果公众号对应的主页跳转链接。

2.获取主页入口内容

使用request , urllib,urllib2,或者直接使用webdriver+phantomjs等都可以

这里使用的是request.get()的方法获取入口网页内容

[python]view plain

  • #爬虫伪装头部设置

  • self.headers={'User-Agent':'Mozilla/5.0(WindowsNT6.3;WOW64;rv:51.0)Gecko/20100101Firefox/51.0'}

  • #设置操作超时时长

  • self.timeout=5

  • #爬虫模拟在一个request.session中完成

  • self.s=requests.Session()


  • [python]view plain

  • #搜索入口地址,以公众为关键字搜索该公众号

  • defget_search_result_by_keywords(self):

  • self.log('搜索地址为:%s'%self.sogou_search_url)

  • returnself.s.get(self.sogou_search_url,headers=self.headers,timeout=self.timeout).content

  • 3.获取公众号地址

    从获取到的网页内容中,得到公众号主页地址, 这一步骤有很多方法, beautifulsoup、webdriver,直接使用正则,pyquery等都可以

    这里使用的是pyquery的方法来查找公众号主页入口地址

    [python]view plain

  • #获得公众号主页地址

  • defget_wx_url_by_sougou_search_html(self,sougou_search_html):

  • doc=pq(sougou_search_html)

  • #printdoc('p[class="tit"]')('a').attr('href')

  • #printdoc('div[class=img-box]')('a').attr('href')

  • #通过pyquery的方式处理网页内容,类似用beautifulsoup,但是pyquery和jQuery的方法类似,找到公众号主页地址

  • returndoc('div[class=txt-box]')('p[class=tit]')('a').attr('href')

  • 4.获取公众号主页的文章列表

    首先需要加载公众号主页,这里用的是phantomjs+webdriver, 因为这个主页的内容需要JS 渲染加载,采用之前的方法只能获得静态的网页内容

    [python]view plain

  • #使用webdriver加载公众号主页内容,主要是js渲染的部分

  • defget_selenium_js_html(self,url):

  • browser=webdriver.PhantomJS()

  • browser.get(url)

  • time.sleep(3)

  • #执行js得到整个页面内容

  • html=browser.execute_script("returndocument.documentElement.outerHTML")

  • returnhtml

  • 得到主页内容之后,获取文章列表,这个文章列表中有我们需要的内容

    [python]view plain

  • #获取公众号文章内容

  • defparse_wx_articles_by_html(self,selenium_html):

  • doc=pq(selenium_html)

  • print'开始查找内容msg'

  • returndoc('div[class="weui_media_boxappmsg"]')

  • #有的公众号仅仅有10篇文章,有的可能多一点

  • #returndoc('div[class="weui_msg_card"]')#公众号只有10篇文章文章的

  • 5.解析每一个文章列表,获取我们需要的信息

    6.处理对应的内容

    包括文章名字,地址,简介,发表时间等

    7.保存文章内容

    以html的格式保存到本地

    同时将上一步骤的内容保存成excel 的格式

    8.保存json数据

    这样,每一步拆分完,爬取公众号的文章就不是特别难了。

    三、源码

    第一版源码如下:

    [python]view plain

  • #!/usr/bin/python

  • #coding:utf-8

  • importsys

  • reload(sys)

  • sys.setdefaultencoding('utf-8')

  • fromurllibimportquote

  • frompyqueryimportPyQueryaspq

  • fromseleniumimportwebdriver

  • importrequests

  • importtime

  • importre

  • importjson

  • importos

  • classweixin_spider:

  • def__init__(self,kw):

  • '构造函数'

  • self.kw=kw

  • #搜狐微信搜索链接

  • #self.sogou_search_url='http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&_sug_=n&_sug_type_='%quote(self.kw)

  • self.sogou_search_url='http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&s_from=input&_sug_=n&_sug_type_='%quote(self.kw)

  • #爬虫伪装

  • self.headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64;rv:47.0)Gecko/20100101Firephp/0refox/47.0FirePHP/0.7.4.1'}

  • #操作超时时长

  • self.timeout=5

  • self.s=requests.Session()

  • defget_search_result_by_kw(self):

  • self.log('搜索地址为:%s'%self.sogou_search_url)

  • returnself.s.get(self.sogou_search_url,headers=self.headers,timeout=self.timeout).content

  • defget_wx_url_by_sougou_search_html(self,sougou_search_html):

  • '根据返回sougou_search_html,从中获取公众号主页链接'

  • doc=pq(sougou_search_html)

  • #printdoc('p[class="tit"]')('a').attr('href')

  • #printdoc('div[class=img-box]')('a').attr('href')

  • #通过pyquery的方式处理网页内容,类似用beautifulsoup,但是pyquery和jQuery的方法类似,找到公众号主页地址

  • returndoc('div[class=txt-box]')('p[class=tit]')('a').attr('href')

  • defget_selenium_js_html(self,wx_url):

  • '执行js渲染内容,并返回渲染后的html内容'

  • browser=webdriver.PhantomJS()

  • browser.get(wx_url)

  • time.sleep(3)

  • #执行js得到整个dom

  • html=browser.execute_script("returndocument.documentElement.outerHTML")

  • returnhtml

  • defparse_wx_articles_by_html(self,selenium_html):

  • '从selenium_html中解析出微信公众号文章'

  • doc=pq(selenium_html)

  • returndoc('div[class="weui_msg_card"]')

  • defswitch_arctiles_to_list(self,articles):

  • '把articles转换成数据字典'

  • articles_list=[]

  • i=1

  • ifarticles:

  • forarticleinarticles.items():

  • self.log(u'开始整合(%d/%d)'%(i,len(articles)))

  • articles_list.append(self.parse_one_article(article))

  • i+=1

  • #break

  • returnarticles_list

  • defparse_one_article(self,article):

  • '解析单篇文章'

  • article_dict={}

  • article=article('.weui_media_box[id]')

  • title=article('h4[class="weui_media_title"]').text()

  • self.log('标题是:%s'%title)

  • url='http://mp.weixin.qq.com'+article('h4[class="weui_media_title"]').attr('hrefs')

  • self.log('地址为:%s'%url)

  • summary=article('.weui_media_desc').text()

  • self.log('文章简述:%s'%summary)

  • date=article('.weui_media_extra_info').text()

  • self.log('发表时间为:%s'%date)

  • pic=self.parse_cover_pic(article)

  • content=self.parse_content_by_url(url).html()

  • contentfiletitle=self.kw+'/'+title+'_'+date+'.html'

  • self.save_content_file(contentfiletitle,content)

  • return{

  • 'title':title,

  • 'url':url,

  • 'summary':summary,

  • 'date':date,

  • 'pic':pic,

  • 'content':content

  • }

  • defparse_cover_pic(self,article):

  • '解析文章封面图片'

  • pic=article('.weui_media_hd').attr('style')

  • p=re.compile(r'background-image:url(.∗?)')

  • rs=p.findall(pic)

  • self.log('封面图片是:%s'%rs[0]iflen(rs)>0else'')

  • returnrs[0]iflen(rs)>0else''

  • defparse_content_by_url(self,url):

  • '获取文章详情内容'

  • page_html=self.get_selenium_js_html(url)

  • returnpq(page_html)('#js_content')

  • defsave_content_file(self,title,content):

  • '页面内容写入文件'

  • withopen(title,'w')asf:

  • f.write(content)

  • defsave_file(self,content):

  • '数据写入文件'

  • withopen(self.kw+'/'+self.kw+'.txt','w')asf:

  • f.write(content)

  • deflog(self,msg):

  • '自定义log函数'

  • printu'%s:%s'%(time.strftime('%Y-%m-%d%H:%M:%S'),msg)

  • defneed_verify(self,selenium_html):

  • '有时候对方会封锁ip,这里做一下判断,检测html中是否包含id=verify_change的标签,有的话,代表被重定向了,提醒过一阵子重试'

  • returnpq(selenium_html)('#verify_change').text()!=''

  • defcreate_dir(self):

  • '创建文件夹'

  • ifnotos.path.exists(self.kw):

  • os.makedirs(self.kw)

  • defrun(self):

  • '爬虫入口函数'

  • #Step0:创建公众号命名的文件夹

  • self.create_dir()

  • #Step1:GET请求到搜狗微信引擎,以微信公众号英文名称作为查询关键字

  • self.log(u'开始获取,微信公众号英文名为:%s'%self.kw)

  • self.log(u'开始调用sougou搜索引擎')

  • sougou_search_html=self.get_search_result_by_kw()

  • #Step2:从搜索结果页中解析出公众号主页链接

  • self.log(u'获取sougou_search_html成功,开始抓取公众号对应的主页wx_url')

  • wx_url=self.get_wx_url_by_sougou_search_html(sougou_search_html)

  • self.log(u'获取wx_url成功,%s'%wx_url)

  • #Step3:Selenium+PhantomJs获取js异步加载渲染后的html

  • self.log(u'开始调用selenium渲染html')

  • selenium_html=self.get_selenium_js_html(wx_url)

  • #Step4:检测目标网站是否进行了封锁

  • ifself.need_verify(selenium_html):

  • self.log(u'爬虫被目标网站封锁,请稍后再试')

  • else:

  • #Step5:使用PyQuery,从Step3获取的html中解析出公众号文章列表的数据

  • self.log(u'调用selenium渲染html完成,开始解析公众号文章')

  • articles=self.parse_wx_articles_by_html(selenium_html)

  • self.log(u'抓取到微信文章%d篇'%len(articles))

  • #Step6:把微信文章数据封装成字典的list

  • self.log(u'开始整合微信文章数据为字典')

  • articles_list=self.switch_arctiles_to_list(articles)

  • #Step7:把Step5的字典list转换为Json

  • self.log(u'整合完成,开始转换为json')

  • data_json=json.mps(articles_list)

  • #Step8:写文件

  • self.log(u'转换为json完成,开始保存json数据到文件')

  • self.save_file(data_json)

  • self.log(u'保存完成,程序结束')

  • #main

  • if__name__=='__main__':

  • gongzhonghao=raw_input(u'输入要爬取的公众号')

  • ifnotgongzhonghao:

  • gongzhonghao='python6359'

  • weixin_spider(gongzhonghao).run()

  • 第二版代码:

    对代码进行了一些优化和整改,主要:

    1.增加了excel存贮

    2.对获取文章内容规则进行修改

    3.丰富了注释

    本程序已知缺陷: 如果公众号的文章内容包括视视频,可能会报错。

    [python]view plain

  • #!/usr/bin/python

  • #coding:utf-8

Ⅳ Python爬取知乎与我所理解的爬虫与反爬虫

关于知乎验证码登陆的问题,用到了Python上一个重要的图片处理库PIL,如果不行,就把图片存到本地,手动输入。

通过对知乎登陆是的抓包,可以发现登陆知乎,需要post三个参数,一个是账号,一个是密码,一个是xrsf。
这个xrsf隐藏在表单里面,每次登陆的时候,应该是服务器随机产生一个字符串。所有,要模拟登陆的时候,必须要拿到xrsf。

用chrome (或者火狐 httpfox 抓包分析)的结果:

所以,必须要拿到xsrf的数值,注意这是一个动态变化的参数,每次都不一样。

拿到xsrf,下面就可以模拟登陆了。
使用requests库的session对象,建立一个会话的好处是,可以把同一个用户的不同请求联系起来,直到会话结束都会自动处理cookies。

注意:cookies 是当前目录的一个文件,这个文件保存了知乎的cookie,如果是第一个登陆,那么当然是没有这个文件的,不能通过cookie文件来登陆。必须要输入密码。

这是登陆的函数,通过login函数来登陆,post 自己的账号,密码和xrsf 到知乎登陆认证的页面上去,然后得到cookie,将cookie保存到当前目录下的文件里面。下次登陆的时候,直接读取这个cookie文件。

这是cookie文件的内容

以下是源码:

运行结果:

https://github.com/zhaozhengcoder/Spider/tree/master/spider_hu

反爬虫最基本的策略:

爬虫策略:
这两个都是在http协议的报文段的检查,同样爬虫端可以很方便的设置这些字段的值,来欺骗服务器。

反爬虫进阶策略:
1.像知乎一样,在登录的表单里面放入一个隐藏字段,里面会有一个随机数,每次都不一样,这样除非你的爬虫脚本能够解析这个随机数,否则下次爬的时候就不行了。
2.记录访问的ip,统计访问次数,如果次数太高,可以认为这个ip有问题。

爬虫进阶策略:
1.像这篇文章提到的,爬虫也可以先解析一下隐藏字段的值,然后再进行模拟登录。
2.爬虫可以使用ip代理池的方式,来避免被发现。同时,也可以爬一会休息一会的方式来降低频率。另外,服务器根据ip访问次数来进行反爬,再ipv6没有全面普及的时代,这个策略会很容易造成误伤。(这个是我个人的理解)。

通过Cookie限制进行反爬虫:
和Headers校验的反爬虫机制类似,当用户向目标网站发送请求时,会再请求数据中携带Cookie,网站通过校验请求信息是否存在Cookie,以及校验Cookie的值来判定发起访问请求的到底是真实的用户还是爬虫,第一次打开网页会生成一个随机cookie,如果再次打开网页这个Cookie不存在,那么再次设置,第三次打开仍然不存在,这就非常有可能是爬虫在工作了。

反爬虫进进阶策略:
1.数据投毒,服务器在自己的页面上放置很多隐藏的url,这些url存在于html文件文件里面,但是通过css或者js使他们不会被显示在用户看到的页面上面。(确保用户点击不到)。那么,爬虫在爬取网页的时候,很用可能取访问这个url,服务器可以100%的认为这是爬虫干的,然后可以返回给他一些错误的数据,或者是拒绝响应。

爬虫进进阶策略:
1.各个网站虽然需要反爬虫,但是不能够把网络,谷歌这样的搜索引擎的爬虫给干了(干了的话,你的网站在网络都说搜不到!)。这样爬虫应该就可以冒充是网络的爬虫去爬。(但是ip也许可能被识破,因为你的ip并不是网络的ip)

反爬虫进进进阶策略:
给个验证码,让你输入以后才能登录,登录之后,才能访问。

爬虫进进进阶策略:
图像识别,机器学习,识别验证码。不过这个应该比较难,或者说成本比较高。

参考资料:
廖雪峰的python教程
静觅的python教程
requests库官方文档
segmentfault上面有一个人的关于知乎爬虫的博客,找不到链接了

Ⅳ 使用python3 requests和bs4进行爬虫(二)爬取文章

为了做到更优雅,这次抛弃了urllib库的引用,使用requests和beautifulsoup搭配的方式进行

首先构建一个顷哗请求并且响应它

然后呢到上找一篇文章试试手,看一下网页源码找到文章的div

以及找到文章内容,仔细看看内容还挺不错雀裂行哈哈

可以发现所有的内容都在p标签里面,那么源宴接下来就简单多了只需要

f5运行一下

最后使用codecs库来进行文件操作将文章保存到本地

没错使用上requests和bs4之后爬取文章的工作是那么的轻松呢

效果图

Ⅵ Python中的爬虫框架有哪些呢

实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实现你想要的功能。更重要的,Python也是数据挖掘和分析的好能手。那么,Python爬虫一般用什么框架比较好?
一般来讲,只有在遇到比较大型的需求时,才会使用Python爬虫框架。这样的做的主要目的,是为了方便管理以及扩展。本文我将向大家推荐十个Python爬虫框架。
1、Scrapy:Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。它是很强大的爬虫框架,可以满足简单的页面爬取,比如可以明确获知url pattern的情况。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如weibo的页面信息,这个框架就满足不了需求了。它的特性有:HTML, XML源数据 选择及提取 的内置支持;提供了一系列在spider之间共享的可复用的过滤器(即 Item Loaders),对智能处理爬取数据提供了内置支持。
2、Crawley:高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等。
3、Portia:是一个开源可视化爬虫工具,可让使用者在不需要任何编程知识的情况下爬取网站!简单地注释自己感兴趣的页面,Portia将创建一个蜘蛛来从类似的页面提取数据。简单来讲,它是基于scrapy内核;可视化爬取内容,不需要任何开发专业知识;动态匹配相同模板的内容。

4、newspaper:可以用来提取新闻、文章和内容分析。使用多线程,支持10多种语言等。作者从requests库的简洁与强大得到灵感,使用Python开发的可用于提取文章内容的程序。支持10多种语言并且所有的都是unicode编码。
5、Python-goose:Java写的文章提取工具。Python-goose框架可提取的信息包括:文章主体内容、文章主要图片、文章中嵌入的任何Youtube/Vimeo视频、元描述、元标签。
6、Beautiful Soup:名气大,整合了一些常用爬虫需求。它是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间。Beautiful Soup的缺点是不能加载JS。
7、mechanize:它的优点是可以加载JS。当然它也有缺点,比如文档严重缺失。不过通过官方的example以及人肉尝试的方法,还是勉强能用的。
8、selenium:这是一个调用浏览器的driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。Selenium是自动化测试工具,它支持各种浏览器,包括 Chrome,Safari,Firefox等主流界面式浏览器,如果在这些浏览器里面安装一个 Selenium 的插件,可以方便地实现Web界面的测试. Selenium支持浏览器驱动。Selenium支持多种语言开发,比如 Java,C,Ruby等等,PhantomJS 用来渲染解析JS,Selenium 用来驱动以及与Python的对接,Python进行后期的处理。
9、cola:是一个分布式的爬虫框架,对于用户来说,只需编写几个特定的函数,而无需关注分布式运行的细节。任务会自动分配到多台机器上,整个过程对用户是透明的。项目整体设计有点糟,模块间耦合度较高。
10、PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。Python脚本控制,可以用任何你喜欢的html解析包。

Ⅶ 如何利用爬虫爬微信公众号的内容

过程很繁琐,步骤如下:

1、写按键精灵脚本,在手机上自动点击公号文章列表页,也就是“查看历史消息”;

2、使用fiddler代理劫持手机端的访问,将网址转发到本地用php写的网页;

3、在php网页上将接收到的网址备份到数据库;

4、用python从数据库取出网址,然后进行正常的爬取。

如果只是想爬取文章内容,似乎并没有访问频率限制,但如果想抓取阅读数、点赞数,超过一定频率后,返回就会变为空值,我设定的时间间隔为10秒,可以正常抓取,这种频率下,一个小时只能抓取360条,已经没什么实际意义了。

微信公众号数据储存

1、腾讯不对你在本服务中相关数据的删除或储存失败负责。

2、腾讯有权根据实际情况自行决定单个用户在本服务中数据的最长储存期限,并在服务器上为其分配数据最大存储空间等。你可根据自己的需要自行备份本服务中的相关数据。

3、如果你停止使用本服务或服务被终止或取消,腾讯可以从服务器上永久地删除你的数据。服务停止、终止或取消后,腾讯没有义务向你返还任何数据。

Ⅷ 想用Python写个爬虫爬取某个网站的文章及评论

既然能写出这么多,说明还是会动手的陵樱李。想快速的实现的话,就先在网上看一下简单的例子,照着例子自己动手写一遍。理解函数怎么用,做什么!然颂高后模仿自己这一个,差不多了,就开始举一反三尺迟来写你想实现的。

Ⅸ 如何利用python写爬虫程序

利用python写爬虫程序的方法:穗腔

1、先分析网站内容,红色部芹族闭分即是网站文章内容div。

Ⅹ 如何用Python爬虫获取那些价值博文

过程大体分为以下几步:

  • 1. 找到爬取的目标网址;

  • 2. 分析网页,找到自已想要保存的信息,这里我们主要保存是博客的文章内容;

  • 3. 清洗整理爬取下来的信息,保存在本地磁盘。

  • 打开csdn的网页,作为一个示例,我们随机打开一个网页:

    http://blog.csdn.net/u013088062/article/list/1。

    可以看到,博主对《C++卷积神经网络》和其它有关机计算机方面的文章都写得不错。

    1#-*-coding:UTF-8-*-
    2importre
    3importurllib2
    4importsys
    5#目的:读取博客文章,记录标题,用Htnl格式保存存文章内容
    6#版本:python2.7.13
    7#功能:读取网页内容
    8classGetHtmlPage():
    9#注意大小写
    10def__init__(self,strPage):
    11self.strPapge=strPage
    12#获取网页
    13defGetPage(self):
    14req=urllib2.Request(self.strPapge)#建立页面请求
    15rep=req.add_header("User-Agent","Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/38.0.2125.122Safari/537.36SE2.XMetaSr1.0")
    16try:
    17cn=urllib2.urlopen(req)#网页请求
    18page=cn.read()#读网页
    19uPage=page.decode("utf-8")#网页编码
    20cn.close()
    21returnuPage
    22excepturllib2.URLError,e:#捕获异常
    23print'URLError:',e.code
    24return
    25excepturllib2.HTTPError,e:#捕获异常
    26print'HTTPError:'+e.reason
    27return
    28returnrePage
    29#正则表达式,获取想要的内容
    30classRePage():
    31#正则表达式提取内容,返回链表
    32defGetReText(self,page,recode):
    33rePage=re.findall(recode,page,re.S)
    34returnrePage
    35#保存文本
    36classSaveText():
    37defSave(self,text,tilte):
    38try:
    39t="blog\"+tilte+".html"
    40f=file(t,"a")
    41f.write(text)
    42f.close()
    43exceptIOError,e:
    44printe.message
    45if__name__=="__main__":
    46s=SaveText()
    47#文件编码
    48#字符正确解码
    49reload(sys)
    50sys.setdefaultencoding("utf-8")#获得系统的默认编码
    51#获取网页
    52page=GetHtmlPage("http://blog.csdn.net/u013088062/article/list/1")
    53htmlPage=page.GetPage()
    54#提取内容
    55reServer=RePage()
    56reBlog=reServer.GetReText(htmlPage,r'.*?(s.+?)')#获取网址链接和标题
    57#再向下获取正文
    58forrefinreBlog:
    59pageHeard="http://blog.csdn.net/"#加链接头
    60strPage=pageHeard+ref[0]
    61tilte=ref[1].replace('[置顶]',"")#用替换的功能去除杂的英文
    62tilte=tilte.replace(" ","").lstrip().rstrip()
    63#获取正文
    64htmlPage=GetHtmlPage(strPage)
    65htmlPageData=htmlPage.GetPage()
    66reBlogText=reServer.GetReText(htmlPageData,'(.+?)')
    67#保存文件
    68fors1inreBlogText:
    69s1=' '+s1
    70s.Save(s1,tilte)

热点内容
游戏服务器php 发布:2024-11-02 10:21:51 浏览:953
家乡编程创 发布:2024-11-02 10:11:32 浏览:282
ipad和安卓板玩游戏哪个好 发布:2024-11-02 10:02:37 浏览:804
邮箱密码怎么查看 发布:2024-11-02 09:59:46 浏览:724
wand应用怎么安卓下载 发布:2024-11-02 09:57:46 浏览:80
为什么手机银行密码是8位 发布:2024-11-02 09:54:19 浏览:460
win10搭建一个本地服务器 发布:2024-11-02 09:53:36 浏览:348
git搭建本地服务器windows 发布:2024-11-02 09:49:23 浏览:783
跳过地址的代理服务器 发布:2024-11-02 09:30:03 浏览:388
Linux配置yum源是什么意思 发布:2024-11-02 09:18:13 浏览:526