网页抓取qq( 昨天晚上网站的robots.txt+C和Ctrl+V的区别)

优采云 发布时间: 2022-03-30 09:09

  网页抓取qq(

昨天晚上网站的robots.txt+C和Ctrl+V的区别)

  Python爬虫csdn博客

  为了下载保存昨晚某csdn大牛的所有博文,我写了一个爬虫自动抓取文章并保存为txt文本,当然也可以保存为html网页。这样Ctrl+C和Ctrl+V都可以用,很方便,抓取其他网站也差不多。

  为了解析爬取的网页,使用了第三方模块BeautifulSoup。这个模块对于解析 html 文件非常有用。当然也可以使用正则表达式自己解析,但是比较麻烦。

  因为csdn网站的robots.txt文件显示禁止任何爬虫,所以爬虫必须伪装成浏览器,不能频繁爬取。你必须睡一会儿才能再次爬行。如果您经常使用它们,您的 ip 将被阻止。 ,但可以使用代理ip。

<p>#-*- encoding: utf-8 -*-

&#x27;&#x27;&#x27;

Created on 2014-09-18 21:10:39

@author: Mangoer

@email: 2395528746@qq.com

&#x27;&#x27;&#x27;

import urllib2

import re

from bs4 import BeautifulSoup

import random

import time

class CSDN_Blog_Spider:

     def __init__(self,url):

          print &#x27;\n&#x27;

          print(&#x27;已启动网络爬虫。。。&#x27;)

          print  &#x27;网页地址: &#x27; + url

          user_agents = [

                    &#x27;Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11&#x27;,

                    &#x27;Opera/9.25 (Windows NT 5.1; U; en)&#x27;,

                    &#x27;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)&#x27;,

                    &#x27;Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)&#x27;,

                    &#x27;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12&#x27;,

                    &#x27;Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9&#x27;,

                    "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7",

                    "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 ",

                   ]

          # use proxy ip 

          # ips_list = [&#x27;60.220.204.2:63000&#x27;,&#x27;123.150.92.91:80&#x27;,&#x27;121.248.150.107:8080&#x27;,&#x27;61.185.21.175:8080&#x27;,&#x27;222.216.109.114:3128&#x27;,&#x27;118.144.54.190:8118&#x27;,

          #           &#x27;1.50.235.82:80&#x27;,&#x27;203.80.144.4:80&#x27;]

          # ip = random.choice(ips_list)

          # print &#x27;使用的代理ip地址: &#x27; + ip

          # proxy_support = urllib2.ProxyHandler({&#x27;http&#x27;:&#x27;http://&#x27;+ip})

          # opener = urllib2.build_opener(proxy_support)

          # urllib2.install_opener(opener)

          agent = random.choice(user_agents)

          req = urllib2.Request(url)

          req.add_header(&#x27;User-Agent&#x27;,agent)

          req.add_header(&#x27;Host&#x27;,&#x27;blog.csdn.net&#x27;)

          req.add_header(&#x27;Accept&#x27;,&#x27;*/*&#x27;)

          req.add_header(&#x27;Referer&#x27;,&#x27;http://blog.csdn.net/mangoer_ys?viewmode=list&#x27;)

          req.add_header(&#x27;GET&#x27;,url)

          html = urllib2.urlopen(req)

          page = html.read().decode(&#x27;gbk&#x27;,&#x27;ignore&#x27;).encode(&#x27;utf-8&#x27;)

          self.page = page

          self.title = self.getTitle()

          self.content = self.getContent()

          self.saveFile()

          

     def printInfo(self):

          print(&#x27;文章标题是:   &#x27;+self.title + &#x27;\n&#x27;)         

          print(&#x27;内容已经存储到out.txt文件中!&#x27;)

     def getTitle(self):

          rex = re.compile(&#x27;(.*?)&#x27;,re.DOTALL)          

          match = rex.search(self.page)

          if match:

                return match.group(1)

          return &#x27;NO TITLE&#x27;

     def getContent(self):

          bs = BeautifulSoup(self.page)

          html_content_list = bs.findAll(&#x27;div&#x27;,{&#x27;id&#x27;:&#x27;article_content&#x27;,&#x27;class&#x27;:&#x27;article_content&#x27;})

          html_content = str(html_content_list[0])

          rex_p = re.compile(r&#x27;(?:.*?)>(.*?)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线