标签归档:python

Python 爬虫抓站 记录(虾米,百度,豆瓣,新浪微博)

python 下用到的库,urllib, urllib2, BeautifulSoup, cookielib, mechanize, re

看Firebug模拟浏览器行为。

1. 虾米

虾米不用登陆,没有IP限制,最简单。Python抓了下Xiami电台的试听数 里用的是

import urllib2

content = urllib2.urlopen('http://www.xiami.com/artist/top/id/1234').read()

每个歌手爬个两三页。把试听数10000以上的歌记下来。歌手id大概有11w。

处理网页用split, 正则表达式re.compile, BeautifulSoup都成。

( Beautiful Soup的中文文档 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html )

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(content)

就能对soup操作了,支持正则表达式,譬如

soup.find('p', align=re.compile('^b.*'))['id']#可以从 <p id="secondpara" align="blah"> 中抓出 secondpara, 可以通过这个抓到a href=""中间的url



soup.find("b", { "class" : "lime" })#可以抓到 <b class="lime">Lime</b>



soup.find("b", { "class" : "lime" }).string #可以提取到<>与</>中间的内容 Lime。

2. 百度

如果想在空间里取米粒之类的操作就要登陆,mechanize比较好用。

 

import mechanize
import cookielib

# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

br.addheaders = [('User-agent''Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
r = br.open('https://passport.baidu.com/?login&tpl=mn')

br.select_form(nr=0)
br.form['username']='abcabcabc' #用户名
br.form.find_control("password").readonly = False
br.form['password']='123123123' #密码
br.submit()

 

然后可以试试开个百度窗口看看自己的用户名在不在网页里

 

content = br.open('http://www.baidu.com').read()

print 'cwyalpha' in content

 

3. 新浪微博

新浪微博的登陆很麻烦。网上有很多模拟SinaSSO登陆的做法,比如

http://chen.yi.bo.blog.163.com/blog/static/15062110920120151191189/

http://denger.iteye.com/blog/1039052

http://community.itbbs.cn/thread/19120/

http://blog.csdn.net/xiaojianpitt/article/details/6440561

继续阅读