爬虫的起步,先利用request模块来写个百度接口的调用
import requests
url_pre = 'http://api.map.baidu.com/location/ip'
ak = 'QspXzwz6rO3IviR33HDf8Czv05pR7XoT'
ip = raw_input('input your ip: ')
url = '%s?ak=%s&ip=%s'%(url_pre,ak,ip)
res = requests.get(url)
print res.json()['content']['address']
用来获取ip的定位
下面来爬一下豆瓣top250
import requests
from pyquery import PyQuery as pq
url = 'https://movie.douban.com/top250'
page_content = requests.get(url).text #获取页面的代码,相当于邮件查看源代码
for info in pq(page_content).find('.item'): #找到class为item,他是包含电影名字和评分的最小块,如图1
print pq(info).find('.title').html() #找包含电影名字的class
print pq(info).find('.rating_num').html() #找包含电影评分的class
运行结果:
肖申克的救赎
9.6
霸王别姬
9.5
这个杀手不太冷
9.4
阿甘正传
9.4
美丽人生
9.5
千与千寻
9.2
辛德勒的名单
9.4
泰坦尼克号
9.2
盗梦空间
9.2
机器人总动员
9.3
海上钢琴师
9.2
......
图解1:
再来个例子:
12 url = 'https://movie.douban.com/chart'
13
14 page_content = requests.get(url).text
15 for info in pq(page_content).find('.item'):
16 print pq(info).find('.pl2').find('a').text().replace('
','').split('/')[0]
#这里如果用find('a').html() 会把span的内容也显示出来,用text则会过滤掉这已部分。
已面向对象的方式来改写
import requests
from pyquery import PyQuery as pq
#url = 'https://movie.douban.com/top250'
#page_content = requests.get(url).text
#
#for info in pq(page_content).find('.item'):
# print pq(info).find('.title').html()
# print pq(info).find('.rating_num').html()
#url = 'https://movie.douban.com/chart'
#page_content = requests.get(url).text
#for info in pq(page_content).find('.item'):
# print pq(info).find('.pl2').find('a').text().replace('
','').split('/')[0]
class DoBan:
def __init__(self,num):
self.num = num
self.url = 'https://movie.douban.com/top250?start=%s'
def get_start_url(self):
return range(0,self.num,25)
def download(self,url):
content = requests.get(url).text
self.parse(content)
def parse(self,content):
for info in pq(content).find('.item'):
tmp = pq(info)
print tmp.find('.title').html()
print ' '*4,tmp.find('.rating_num').html(),tmp.find('.inq').html()
def start(self):
for start in self.get_start_url():
url = self.url%(start)
self.download(url)
db = DoBan(100)
db.start()