Python与简单网络爬虫的编写,编写非阻塞

作者:计算机知识

图片 1

重返用Python写爬虫的话题。

采取Python三编写制定二个爬虫

用Python编写轻易的天涯论坛爬虫,python编写爬虫

先说点题外话,笔者一齐首想行使Sina Weibo API来赢得和讯内容,但后来意识新浪微博的API限制实在太多,大家感受一下:

图片 2

唯其如此获取当前授权的用户(正是和煦),而且只能回去最新的伍条,WTF!
故此果断丢弃掉那条路,改为『生爬』,因为PC端的新浪是Ajax的动态加载,爬取起来有些不方便,笔者决然知难而退,改为对活动端的新浪展开爬取,因为移动端的天涯论坛能够经过分页爬取的措施来壹回性爬取全部和讯内容,那样专门的学业就简化了看不完。

最终达成的法力:

一、输入要爬取的新浪用户的user_id,得到该用户的具备乐乎
二、文字内容保留到以%user_id命名文本文件中,全部高清原图保存在weibo_image文件夹中
具体操作:
首先大家要拿走本人的cookie,这里只说chrome的取得格局。

1、用chrome张开腾讯网博客园移动端
2、option command i调出开垦者工具
三、点开Network,将Preserve log选项选中
四、输入账号密码,登陆今日头条博客园

图片 3

五、找到m.weibo.cn->Headers->库克ie,把cookie复制到代码中的#your cookie处

图片 4

然后再拿走你想爬取的用户的user_id,那一个小编不用多说吗了吗,点开用户主页,地址栏里面特别号码正是user_id

图片 5

将python代码保存到weibo_spider.py文件中
一定到当前目录下后,命令行实行python weibo_spider.py user_id
理所必然假使您忘记在后面加user_id,实践的时候命令行也会提醒您输入

末段实施完成

图片 6

图片 7

图片 8

小问题:在本身的测试中,一时会产出图片下载退步的难点,具体原因还不是很驾驭,或者是网速难题,因为本身宿舍的网速实在太不牢固了,当然也是有希望是其他难点,所以在先后根目录上边,作者还生成了3个userid_imageurls的文书文件,里面积存了爬取的全部图片的下载链接,假设出现大片的图片下载战败,能够将该链接群一股脑导进迅雷等下载工具举行下载。

除此以外,作者的系统是OSX EI Capitan十.11.二,Python的本子是二.七,依赖库用sudo pip install XXXX就能够安装,具体配置难题得以自行stackoverflow,这里就不开始展览讲了。

下边作者就交给达成代码

#-*-coding:utf8-*-

import re
import string
import sys
import os
import urllib
import urllib2
from bs4 import BeautifulSoup
import requests
from lxml import etree

reload(sys) 
sys.setdefaultencoding('utf-8')
if(len(sys.argv)>=2):
  user_id = (int)(sys.argv[1])
else:
  user_id = (int)(raw_input(u"请输入user_id: "))

cookie = {"Cookie": "#your cookie"}
url = 'http://weibo.cn/u/%d?filter=1&page=1'%user_id

html = requests.get(url, cookies = cookie).content
selector = etree.HTML(html)
pageNum = (int)(selector.xpath('//input[@name="mp"]')[0].attrib['value'])

result = "" 
urllist_set = set()
word_count = 1
image_count = 1

print u'爬虫准备就绪...'

for page in range(1,pageNum 1):

 #获取lxml页面
 url = 'http://weibo.cn/u/%d?filter=1&page=%d'%(user_id,page) 
 lxml = requests.get(url, cookies = cookie).content

 #文字爬取
 selector = etree.HTML(lxml)
 content = selector.xpath('//span[@class="ctt"]')
 for each in content:
  text = each.xpath('string(.)')
  if word_count>=4:
   text = "%d :"%(word_count-3)  text "nn"
  else :
   text = text "nn"
  result = result   text
  word_count  = 1

 #图片爬取
 soup = BeautifulSoup(lxml, "lxml")
 urllist = soup.find_all('a',href=re.compile(r'^http://weibo.cn/mblog/oripic',re.I))
 first = 0
 for imgurl in urllist:
  urllist_set.add(requests.get(imgurl['href'], cookies = cookie).url)
  image_count  =1

fo = open("/Users/Personals/%s"%user_id, "wb")
fo.write(result)
word_path=os.getcwd() '/%d'%user_id
print u'文字微博爬取完毕'

link = ""
fo2 = open("/Users/Personals/%s_imageurls"%user_id, "wb")
for eachlink in urllist_set:
 link = link   eachlink  "n"
fo2.write(link)
print u'图片链接爬取完毕'


if not urllist_set:
 print u'该页面中不存在图片'
else:
 #下载图片,保存在当前目录的pythonimg文件夹下
 image_path=os.getcwd() '/weibo_image'
 if os.path.exists(image_path) is False:
  os.mkdir(image_path)
 x=1
 for imgurl in urllist_set:
  temp= image_path   '/%s.jpg' % x
  print u'正在下载第%s张图片' % x
  try:
   urllib.urlretrieve(urllib2.urlopen(imgurl).geturl(),temp)
  except:
   print u"该图片下载失败:%s"%imgurl
  x =1

print u'原创微博爬取完毕,共%d条,保存路径%s'%(word_count-4,word_path)
print u'微博图片爬取完毕,共%d张,保存路径%s'%(image_count-1,image_path)

叁个轻巧易行的今日头条爬虫就完了了,希望对我们的学习抱有辅助。

世家在读 爬虫类别 的帖鸡时平常问笔者怎样写出不打断的爬虫,那很难,但管用。通过完毕部分小计策能够令你的网页爬虫活得更加久。那么前几日作者就将和豪门钻探那上头的话题。

Python平昔是自己重视选用的脚本语言,未有之一。Python的语言简练利落,标准库成效强大,经常能够用作总括器,文本编码转换,图片管理,批量下载,批量管理文件等。不问可见作者很欣赏,也越用越上手,这么好用的1个工具,普通人自己不报告她。。。

须求简单介绍

多年来厂里有2个新闻搜集类的急需,细节大体如下:

  1. 效仿登入3个内网网址(SSO)
  2. 抓取新闻(援救代理服务器的法子访问)
  3. 加工内容样式,以适配手机显示器
  4. 将正文中的图片转存到自已的服务器,并替换img标签中的url
  5. 图形存款和储蓄服务器须求复用已部分法斯特DFS分布式文件系统
  6. 采访结果导入生产库
  7. 援救日志打字与印刷

初学Python3,正好用这些供给练练手,最后很奇怪的是只用200多行代码就兑现了,如若换来Java的话大致供给1200行吧。果然应了那句古语:人生苦短,笔者用Python

您或然感兴趣的篇章:

  • python模拟搜狐天涯论坛登入成效(和讯新浪爬虫)
  • 零基础写python爬虫之打包生成exe文件
  • 零基础写python爬虫之爬虫编写全记录
  • 零基础写python爬虫之使用Scrapy框架编写爬虫
  • 简言之的抓取天猫商城图片的Python爬虫
  • Python与简单网络爬虫的编写,编写非阻塞。Python达成爬取博客园神回复轻巧爬虫代码分享
  • python编写爬虫小程序
  • python达成爬虫下载美人图片
  • 基python完毕二十多线程网页爬虫

先说点题外话,笔者一发轫想采用Sina Weibo API来收获博客园内容,但新兴察觉果壳网搜狐的API限制实在...

用户代理

您须求关爱的第一件事是设置用户代理。 用户代理是用户访问的工具,并告知服务器用户正在利用哪个网络浏览器访问网址。 借使未安装用户代理,大多网址不会让您查看内容。 假如你正在利用rquests库,能够进行如下操作:

headers = {
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
    }
r = requests.get('example.com',headers=headers)

  

你能够经过在 谷歌(Google) 寻觅栏中输入 User-Agent 来得到用户代理的信息,并且它会回去您眼下的用户代理音信。

当今,你早就有了一个用户代理,但怎么样去选取它? 那么,最棒的措施是从文本文件、数据库、Python 的列表中甄选四个私下的 User-Agent 。 Udger 分享了大量的 UA w.r.t 浏览器。 比方,对于 Chrome 来讲,它看起来像 这样 ,对 Firefox 来说,又像 这样 。 以后让我们来创建四个函数,它将赶回1个私行 UA ,你可以在央浼中选择:

import numpy as np
def get_random_ua():
    random_ua = ''
    ua_file = 'ua_file.txt'
    try:
        with open(ua_file) as f:
            lines = f.readlines()
        if len(lines) > 0:
            prng = np.random.RandomState()
            index = prng.permutation(len(lines) - 1)
            idx = np.asarray(index, dtype=np.integer)[0]
            random_proxy = lines[int(idx)]
    except Exception as ex:
        print('Exception in random_ua')
        print(str(ex))
    finally:
        return random_ua

  

ua_file.txt 包蕴叁个起点自己上边共享的网站的每行 UA 。 函数 get_random_ua 将始终从该文件中回到唯1的 UA 。 你未来得以调用如下函数:

user_agent = get_random_ua()
headers = {
        'user-agent': user_agent,
    }
r = requests.get('example.com',headers=headers)

  

因为其庞大的字符串管理技能,以及urllib贰,cookielib,re,threading这几个模块的存在,用Python来写爬虫就简直易于反掌了。简单到哪边程度呢。笔者霎时跟某同学说,笔者写电影来了用到的多少个爬虫以及数据整理的一批零零散散的剧本代码行数总共不超越一千行,写电影来了这一个网址也唯有150来行代码。因为爬虫的代码在此外壹台陆拾陆位的黑苹果上,所以就不列出来,只列一下VPS上网址的代码,tornadoweb框架写的

登陆页面抓包

第3步当然是抓包,然后再依靠抓到的源委,模拟举办HTTP请求。

常用的抓包工具,有Mac下的查理和Windows下的Fiddler。
它们的法则都以在本机开一个HTTP或SOCKS代理服务器端口,然后将浏览器的代理服务器设置成这些端口,那样浏览器中兼有的HTTP请求都会先经过抓包工具记录下来了。

  • Chrales
    https://www.charlesproxy.com

    图片 9

  • Fiddler
    http://www.telerik.com/fiddler

    图片 10

这里推荐尽量采用Fiddler,原因是Charles对于cookie的展现是有bug的,举例,实况:请求A重临了LtpaToken那么些cookie,请求B中回到了sid这么些cookie。但在Charles中的体现是:请求A中1度同一时候重临了LtpaToken和sid七个cookie,那就很轻易误导人了。
此外Fiddler今后一度有了Linux的Beta版本,貌似是用类似wine的方法完成的。

倘诺网站使用了单点登陆,或然会提到到手工业生成cookie。所以不止需求深入分析每一条HTTP请求的request和response,以及带回到的cookie,还要对页面中的javascript进行辨析,看一下是怎么生成cookie的。

Referrers

接下去你需求设置的是援引。 一般的平整是,假若它是三个列表页面或主页,那么您能够设置该国家的 Google主页网站。 举例,假设自个儿正在爬取 olx.com.pk ,那么作者会设置 而不是

假如你要抓取各种产品页面,可以在引用中设置相关品种的网址,只怕能够找到要抓取的域的反向链接 。 小编一般采纳 SEMRush 来这么做。针对链接   通过 SEMRush 会重临如下所示的剧情:

图片 11

若是您点击查看放大的图像,你能够见到部分链接指向本身所需的体系。一旦您搜罗全部这一个真正的反向链接,你能够透过复制逻辑 insideget_random_ua()再次回到随机引用,并将它们当做引用。 如下所示:

headers = {
        'user-agent': user_agent,
        'referer':referer
    }

  

[[email protected] movie_site]$ wc -l *.py template/*
  156 msite.py
   92 template/base.html
   79 template/category.html
   94 template/id.html
   47 template/index.html
   77 template/search.html

仿照登入

将页面深入分析达成之后,就可以拓展模拟HTTP请求了。
此间有七个要命好用的第三方库, requestBeautifulSoup

requests 库是用来取代urllib的,可以丰富人性化的的生成HTTP请求,模拟session以及冒用cookie更是方便。
BeautifulSoup 用来代表re模块,举行HTML内容剖判,能够用tag, class, id来定位想要提取的原委,也支撑正则表明式等。

现实的选取方法平昔看官方文书档案就足以了,写的老大详细,这里直接交给地址:
requests官方文书档案
BeautifulSoup官方文书档案

透过pip三来安装那五个模块:

sudo apt-get install python3-pip
sudo pip3 install requests
sudo pip3 install beautifulsoup4

导入模块:

import requests
from bs4 import BeautifulSoup

效仿登入:

def sso_login():
    # 调用单点登录工号认证页面
    response = session.post(const.SSO_URL,
                            data={'login': const.LOGIN_USERNAME, 'password': const.LOGIN_PASSWORD, 'appid': 'np000'})

    # 分析页面,取token及ltpa
    soup = BeautifulSoup(response.text, 'html.parser')
    token = soup.form.input.get('value')
    ltpa = soup.form.input.input.input.get('value')
    ltpa_value = ltpa.split(';')[0].split('=', 1)[1]

    # 手工设置Cookie
    session.cookies.set('LtpaToken', ltpa_value, domain='unicom.local', path='/')

    # 调用云门户登录页面(2次)
    payload = {'token': token}
    session.post(const.LOGIN_URL, data=payload, proxies=const.PROXIES)
    response = session.post(const.LOGIN_URL, data=payload, proxies=const.PROXIES)
    if response.text == "success":
        logging.info("登录成功")
        return True
    else:
        logging.info("登录失败")
        return False

这里运用了BeautifulSoup进行HTML深入分析,收取页面中的token、ltpa等字段。
接下来利用session.cookies.set伪造了叁个cookie,注意当中的domain参数,设置成一级域名。
下一场用这么些session,去调用网址页面,换回sid这一个token。并得以依靠页面包车型大巴回到新闻,来差十分的少推断一下得逞照旧败诉。

代理 IP

本人只可以强调那或多或少。假使认真研商,那么你必须选取三个代理 IP 来制止阻塞。 大大多网址会依照你的服务器或主机提供商的静态 IP 来阻止抓取工具。 这一个网站使用智能的工具来规定有些 IP 或 IP 池的不二等秘书诀,并简要地拦截它们。 那也是怎么建议购买多少个 IP 地址,50-九20个至少要防止阻塞。有成都百货上千可用的劳动,但自个儿对 Shaders(未来称之为 OxyLabs )以为满足。 它们即使很贵,但服务品质很好。 确定保障您在订货五个 IP 时,须要提供随机 IP 或至少不依据 一.②.3.四 到 一.二.三.十0 等特定形式。站点管理员将很简短的装置 IP 地址不全部为 一.2.3.* 。 就像是此轻巧。

假使你正在选择请求,你能够像上边那样使用它:

r = requests.get('example.com',headers=headers,proxies={'https': proxy_url})

  

假使你在 Selenium 使用代理 IP ,那么那将稍微棘手。

r = requests.get('example.com',headers=headers,proxies={'https': proxy_url})
proxy = get_random_proxy().replace('n', '')
        service_args = [
            '--proxy={0}'.format(proxy),
            '--proxy-type=http',
            '--proxy-auth=user:path'
        ]
        print('Processing..'   url)
        driver = webdriver.PhantomJS(service_args=service_args)

  

不用说,get_random_proxy() 是回去1个唯壹且任意代理的主意,就好像上边得到唯1且随意的 UA 和 Referer 同样。

您能够思念二个这样的种类,在系统中你能够安装三个 IP 天天或每小时访问网址频率,如若它超过了,那么它将被放入3个笼子里直到第2天。 笔者所在的合营社规划了一个如此的系统,不止安装了 IP 访问频率,还记下了哪个 IP 被挡住。 最终,小编只是利用代理服务提供者仅替换那么些代理。 由于那超乎了本文的范围,所以自身不会详细介绍它。

下边直接show一下爬虫的编辑流程。以下内容仅供调换学习使用,未有其他意思。

列表页面抓取

签到成功以后,接下去的列表页面抓取将要简明的多了,不思虑分页的话,直接取八个list出来遍历就可以。

def capture_list(list_url):
    response = session.get(list_url, proxies=const.PROXIES)
    response.encoding = "UTF-8"
    soup = BeautifulSoup(response.text, 'html.parser')
    news_list = soup.find('div', 'xinwen_list').find_all('a')
    news_list.reverse()
    logging.info("开始采集")
    for news_archor in news_list:
        news_cid = news_archor.attrs['href'].split('=')[1]
        capture_content(news_cid)
    logging.info("结束采集")

这里运用了response.encoding = "UTF-8"来手工业消除乱码难点。

Request Headers

到近来截至,事情你都早已做得很好,但是依旧有个别油滑的网站供给您做越多的事情。当你拜访页面包车型地铁时候她们会招来特定的央求响应头消息,假若一定的头音信未有被察觉,他们会堵住内容展现也许呈现3个假冒伪造低劣的源委。模拟一个你想访问的网址的乞请是特别轻松的。举个例子,比如您正企图访问多个Craigslist URL ,并且想驾驭哪位尾部音信是急需的。进入 Chrome/Firefox 浏览器,检查正在访问的页面,你应该会师到下边这几个剧情:

图片 12

倘诺你点击了Logo并查阅,你能找到除了 referer 和 user-agent 之外的豁达音信。你能贰回性全都达成也得以一个个的贯彻并测试。无论访问哪个网址,笔者老是去设置那些音信。请保管您不只是复制粘贴这一个音讯去拜访具有网址,因为这个消息日常会因网址分裂而更换。

headers = {
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
        'referrer': 'https://google.com',
        'Accept': 'text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'en-US,en;q=0.9',
        'Pragma': 'no-cache',
    }

以某湾的新型录制下载财富为例,其网站是

资源音讯页面抓取

情报页面抓取,涉及到插一时表,这里未有运用每叁方库,直接用SQL方式插入。
里面涉及到样式管理与图片转存,另写2个模块pconvert来实现。

def capture_content(news_cid):
    # 建立DB连接
    conn = mysql.connector.connect(user=const.DB_USERNAME, password=const.DB_PASSWORD, host=const.DB_HOST,
                                   port=const.DB_PORT, database=const.DB_DATABASE)
    cursor = conn.cursor()

    # 判断是否已存在
    cursor.execute('select count(*) from material_prepare where news_cid = %s', (news_cid,))
    news_count = cursor.fetchone()[0]
    if news_count > 0:
        logging.info("采集"   news_cid   ':已存在')
    else:
        logging.info("采集"   news_cid   ':新增')
        news_url = const.NEWS_BASE_URL   news_cid
        response = session.post(news_url, proxies=const.PROXIES)
        response.encoding = "UTF-8"
        soup = BeautifulSoup(response.text, 'html.parser')
        # logging.info(soup)
        news_title = soup.h3.text.strip()[:64]
        news_brief = soup.find('div', 'brief').p.text.strip()[:100]
        news_author = soup.h5.span.a.text.strip()[:100]
        news_content = soup.find('table', 'unis_detail_content').tr.td.prettify()[66:-7].strip()
        # 样式处理
        news_content = pconvert.convert_style(news_content)
        # 将图片转存至DFS并替换URL
        news_content = pconvert.convert_img(news_content)
        # 入表
        cursor.execute(
            'INSERT INTO material_prepare (news_cid, title, author, summary, content, add_time, status)  VALUES  (%s, %s, %s, %s, %s, now(), "0")'
            , [news_cid, news_title, news_author, news_brief, news_content])
    # 提交
    conn.commit()
    cursor.close()

延时

在伸手之间放置一些延缓总是很好的。小编使用 numpy.random.choice() 来贯彻这一对象,该函数就要本人想延期的服务中传送随机数列表:

delays = [7, 4, 6, 2, 10, 19]
delay = np.random.choice(delays)
time.sleep(delay)

假设您还从未运用过 numpy 库,你也得以行使 random.choice 来达成平等的指标。

要是你实在很急,那么您能够并行实施 USportageL ,我在此之前在 此文 中表明过了。

体制管理

文件样式管理,依旧要用到BeautifulSoup,因为原始站点上的情报内容样式是异彩纷呈的,遵照实情,一边写多少个test函数来扭转文书,一边在浏览器上日益调节和测试。

def convert_style(rawtext):
    newtext = '<div style="margin-left: 0px; margin-right:0px; letter-spacing: 1px; word-spacing:2px;line-height: 1.7em; font-size:18px;text-align:justify; text-justify:inter-ideograph">' 
                rawtext   '</div>'
    newtext = newtext.replace(' align="center"', '')
    soup = BeautifulSoup(newtext, 'html.parser')
    img_tags = soup.find_all("img")
    for img_tag in img_tags:
        del img_tag.parent['style']
    return soup.prettify()

结语

Web 爬虫被堵塞的不鲜明性恒久不会变为零,但您总是能够利用部分主意来躲避它。作者谈谈了有的您应该以某种或别的艺术在 web 爬虫中贯彻的政策。

万1你知道其他计策或手艺,请通过分享商议让自家获知。坚定不移地,期待你的举报。

python学习调换群:1252409陆叁

转载至:5 个用 Python 编写非阻塞 web 爬虫的方法

因为该网页里有雅量广告,只贴一下正文部分剧情:

图表转存至DFS

因为原始站点是在内网中的,收罗下来的HTML中,<img>标签的地址是内网地址,所以在公网中是表现不出来的,须要将图纸转存,并用新的U途观L替换原有的U奥德赛L。

def convert_img(rawtext):
    soup = BeautifulSoup(rawtext, 'html.parser')
    img_tags = soup.find_all("img")
    for img_tag in img_tags:
        raw_img_url = img_tag['src']
        dfs_img_url = convert_url(raw_img_url)
        img_tag['src'] = dfs_img_url
        del img_tag['style']
    return soup.prettify()

图片转存最简单易行的章程是保存花费地的文件,然后再经过nginx或httpd服务将图纸开放出来:

pic_name = raw_img_url.split('/')[-1]
pic_path = TMP_PATH   '/'   pic_name
with open(pic_path, 'wb') as pic_file:
   pic_file.write(pic_content)

但这里大家要求复用已有个别法斯特DFS布满式文件系统,要用到它的多少个客户端的库fdfs_client-py
fdfs_client-py无法一直动用pip叁安装,供给平昔动用1个python三版的源码,并手工业修改个中代码。操作进度如下:

git clone https://github.com/jefforeilly/fdfs_client-py.git
cd dfs_client-py
vi ./fdfs_client/storage_client.py
将第12行 from fdfs_client.sendfile import * 注释掉
python3 setup.py install

sudo pip3 install mutagen

客户端的运用上尚无什么特别的,直接调用upload_by_buffer,传一个图片的buffer进去就足以了,成功后会再次回到自动生成的文本名。

from fdfs_client.client import *
dfs_client = Fdfs_client('conf/dfs.conf')
def convert_url(raw_img_url):
    response = requests.get(raw_img_url, proxies=const.PROXIES)
    pic_buffer = response.content
    pic_ext = raw_img_url.split('.')[-1]
    response = dfs_client.upload_by_buffer(pic_buffer, pic_ext)
    dfs_img_url = const.DFS_BASE_URL   '/'   response['Remote file_id']
    return dfs_img_url

内部dfs.conf文件中,首要正是布局一下 tracker_server

 图片 13

日记管理

那边运用安排文件的不二等秘书籍管理日志,类似JAVA中的log四j吧,首先新建1个log.conf

[loggers]
keys=root

[handlers]
keys=stream_handler,file_handler

[formatters]
keys=formatter

[logger_root]
level=DEBUG
handlers=stream_handler,file_handler

[handler_stream_handler]
class=StreamHandler
level=DEBUG
formatter=formatter
args=(sys.stderr,)

[handler_file_handler]
class=FileHandler
level=DEBUG
formatter=formatter
args=('logs/pspider.log','a','utf8')

[formatter_formatter]
format=%(asctime)s %(name)-12s %(levelname)-8s %(message)s

这里经过配备handlers,能够而且将日志打字与印刷到stderr和文书。
注意args=('logs/pspider.log','a','utf8') 这壹行,用来缓和文本文件中的粤语乱码难题。

日志发轫化:

import logging
from logging.config import fileConfig

fileConfig('conf/log.conf')

日记打字与印刷:

logging.info("test")

对此一个python爬虫,下载那个页面包车型大巴源代码,一行代码能够。这里用到urllib二库。

一体化源码

到此结束,正是何等用Python三写贰个爬虫的一切历程了。
收罗差别的站点,分明是要有两样的拍卖,但方法都是相差无几。
最后,将源码做了部分裁剪,分享在了GitHub上。
https://github.com/xiiiblue/pspider

>>> import urllib2
>>> html = urllib2.urlopen(')
>>> print 'size is', len(html)
size is 52977
自然,也足以用os模块里的system函数调用wget命令来下载网页内容,对于精晓了wget大概curl工具的同班是很有益的。

动用Firebug观看网页结构,能够知晓正文部分html是2个table。每多个财富正是2个tr标签。

本文由bwin必赢发布,转载请注明来源

关键词: 随笔