鱼C论坛

 找回密码
 立即注册
查看: 2169|回复: 4

[已解决]python爬虫

[复制链接]
发表于 2017-10-23 22:09:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
哪位大佬可以逐行讲解一下下面的爬虫每一步都是在干嘛?只有一点python基础,没怎么学爬虫,,,学长让解决其中爬取数据会断页的问题,,脑袋要炸。。。得先看的懂下面的代码是在干嘛才行啊啊啊啊



import requests
import json
head = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
url_ = 'https://maps.googleapis.com/maps/api/place/search/json?language=en&key='
result = []
#url = url_ + key + "&radius=1000&location=" +str(lat) + ',' +str(lng) + '&types=' + types
url = 'https://maps.googleapis.com/maps/api/place/search/json?language=en&key=AIzaSyDIplmP9mM7w7DVf3tHMpLngwA8uc9zl_M&radius=1000&location=1.3066,103.870339&types=accounting'
while True:
    print(url)
    request = requests.get(url,timeout = 3,headers=head)
    request.encoding = 'utf8'
    if "error_message" in request.text:
        print('error')
        break
    res = json.loads(request.text)#
    result.extend(res['results'])
    print('处理开始')
    #如果多页则处理下页
    if res.get('next_page_token') != None:
        print(res.get('next_page_token'))
        url = url_ + 'AIzaSyDIplmP9mM7w7DVf3tHMpLngwA8uc9zl_M' + '&' + 'pagetoken=' + res.get('next_page_token')
    else:
        break
#返回一个 list列表[latlng,result,types,number]
print(len(result))
最佳答案
2017-10-24 08:52:40
ooxx7788 发表于 2017-10-23 22:59
一条一条我做不到了,分个块吧,爬虫其实一般可以分为3部分
1、准备部分,用来包装提交请求需要的东西,例 ...

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-23 22:18:54 | 显示全部楼层
不懂就先慢慢先学着,这叫人家一条一条的解释,你也未必能懂。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-23 22:59:10 | 显示全部楼层
一条一条我做不到了,分个块吧,爬虫其实一般可以分为3部分
1、准备部分,用来包装提交请求需要的东西,例如头部代码,代理,cookies之类的东西
2、获取解析部分,提交请求,解析页面。这部分一般由库requests,BeautifulSoup,re这些来完成,就是用来获取页面html的过程
3、提取保存部分。从html中抽取需要的内容,保存成文件或者导入数据库
  1. import requests
  2. import json
  3. # 准备部分
  4. head = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
  5. url_ = 'https://maps.googleapis.com/maps/api/place/search/json?language=en&key='
  6. result = []
  7. #url = url_ + key + "&radius=1000&location=" +str(lat) + ',' +str(lng) + '&types=' + types
  8. url = 'https://maps.googleapis.com/maps/api/place/search/json?language=en&key=AIzaSyDIplmP9mM7w7DVf3tHMpLngwA8uc9zl_M&radius=1000&location=1.3066,103.870339&types=accounting'
  9. # 请求获取
  10. while True:
  11.     print(url)
  12.     request = requests.get(url,timeout = 3,headers=head)
  13.     request.encoding = 'utf8'
  14.     if "error_message" in request.text:
  15.         print('error')
  16.         break
  17. # 提取保存
  18.     res = json.loads(request.text)#
  19.     result.extend(res['results'])
  20.     print('处理开始')
  21.     #如果多页则处理下页
  22.     if res.get('next_page_token') != None:
  23.         print(res.get('next_page_token'))
  24.         url = url_ + 'AIzaSyDIplmP9mM7w7DVf3tHMpLngwA8uc9zl_M' + '&' + 'pagetoken=' + res.get('next_page_token')
  25.     else:
  26.         break
  27. #返回一个 list列表[latlng,result,types,number]
  28. print(len(result))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-10-24 08:52:40 | 显示全部楼层    本楼为最佳答案   
ooxx7788 发表于 2017-10-23 22:59
一条一条我做不到了,分个块吧,爬虫其实一般可以分为3部分
1、准备部分,用来包装提交请求需要的东西,例 ...

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-24 09:30:28 | 显示全部楼层
递归爬虫
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-10 06:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表