找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 5441|回复: 6

[求助] 抓取豆瓣用户主页地址出错

2

主题

10

帖子

10

积分

贫民

积分
10
dph233 发表于 2017-12-4 22:44:32 | 显示全部楼层 |阅读模式
2威望
  1. # 登录页面信息
复制代码
用github上面的豆瓣短评抓取代码,修改了一下想用于抓取豆瓣用户主页的地理位置,但是每次抓到某个网址的时候就一直停滞陷入假死状态,等了好久之后弹出错误:URLError: <urlopen error timed out>想知道要怎么解决...谢谢各位大佬(代码会有冗杂或者错误,小白望见谅)

用到的文件已上传

素媛.xlsx

157.12 KB, 下载次数: 1

回复

使用道具 举报

2

主题

10

帖子

10

积分

贫民

积分
10
dph233  楼主| 发表于 2017-12-4 22:45:41 | 显示全部楼层
  1. # 登录页面信息
  2. main_url = 'https://accounts.douban.com/login?source=movie'
  3. formdata = {
  4.     "form_email":"******@qq.com",
  5.     "form_password":"****",
  6.     "source":"movie",
  7.     "redir":"https://movie.douban.com/subject/21937452/",
  8.     "login":"登录"
  9. }
  10. user_agent = r'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36 Firefox/23.0'
  11. headers = {'User-Agnet': user_agent, 'Connection': 'keep-alive'}


  12. # 保存cookies便于后续页面的保持登陆
  13. from urllib import request
  14. from http import cookiejar

  15. cookie = cookiejar.CookieJar()
  16. cookie_support = request.HTTPCookieProcessor(cookie)
  17. opener = request.build_opener(cookie_support)


  18. # 编码信息,生成请求,打开页面获取内容
  19. from urllib import parse

  20. logingpostdata = parse.urlencode(formdata).encode('utf-8')
  21. req_ligin = request.Request(url=main_url, data=logingpostdata, headers=headers)
  22. response_login = opener.open(req_ligin).read().decode('utf-8')


  23. # 获取验证码图片地址
  24. from bs4 import BeautifulSoup

  25. try:
  26.     soup = BeautifulSoup(response_login, "html.parser")
  27.     if soup.find('img', id='captcha_image'):
  28.         captchaAddr = soup.find('img', id='captcha_image')['src']

  29.         # 匹配验证码id
  30.         import re

  31.         reCaptchaID = r'<input type="hidden" name="captcha-id" value="(.*?)"/'
  32.         captchaID = re.findall(reCaptchaID, response_login)

  33.         # 下载验证码图片
  34.         request.urlretrieve(captchaAddr, "captcha.jpg")
  35.         # 输入验证码并加入提交信息中,重新编码提交获得页面内容
  36.         captcha = input('please input the captcha:')
  37.         formdata['captcha-solution'] = captcha
  38.         formdata['captcha-id'] = captchaID[0]
  39.         logingpostdata = parse.urlencode(formdata).encode('utf-8')
  40.         req_ligin = request.Request(url=main_url, data=logingpostdata, headers=headers)
  41.         response_login = opener.open(req_ligin).read().decode('utf-8')
  42. finally:
  43.     # 设置等待时间,避免爬取太快
  44.     import time
  45.     # 用于在超时的时候抛出异常,便于捕获重连
  46.     import socket
  47.     timeout = 3
  48.     socket.setdefaulttimeout(timeout)
  49.    
  50.     import random
  51.     import pandas as pd
  52.     xls_file=pd.ExcelFile('F:\\anaconda\\Scripts\\素媛.xlsx')
  53.     xls_file.sheet_names#显示出读入excel文件中的表名字
  54.     table1=xls_file.parse('好评')
  55.     mes=table1.用户主页
  56.     for i in mes:
  57.         url=i.strip()
  58.         req_comment = request.Request(url=url, headers=headers)
  59.             # 超时重连
  60.         state = False
  61.         while not state:
  62.             try:
  63.                 html = opener.open(req_comment).read().decode('utf-8')
  64.                 state = True
  65.             except socket.timeout:
  66.                 state = False
  67.         res=BeautifulSoup(html, "html.parser")
  68.         try:
  69.             a=res.find('div',class_='user-info')
  70.             b=a.find('a').get_text()
  71.             print(url+" "+b)
  72.         except:
  73.             print(url+" "+"无")
  74.         time.sleep(random.uniform(0,3))
  75.     print("抓取完成")
复制代码
回复

使用道具 举报

2

主题

10

帖子

10

积分

贫民

积分
10
dph233  楼主| 发表于 2017-12-4 22:46:32 | 显示全部楼层
  1. # 登录页面信息
  2. main_url = 'https://accounts.douban.com/login?source=movie'
  3. formdata = {
  4.     "form_email":"*******@qq.com",
  5.     "form_password":"****",
  6.     "source":"movie",
  7.     "redir":"https://movie.douban.com/subject/21937452/",
  8.     "login":"登录"
  9. }
  10. user_agent = r'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36 Firefox/23.0'
  11. headers = {'User-Agnet': user_agent, 'Connection': 'keep-alive'}


  12. # 保存cookies便于后续页面的保持登陆
  13. from urllib import request
  14. from http import cookiejar

  15. cookie = cookiejar.CookieJar()
  16. cookie_support = request.HTTPCookieProcessor(cookie)
  17. opener = request.build_opener(cookie_support)


  18. # 编码信息,生成请求,打开页面获取内容
  19. from urllib import parse

  20. logingpostdata = parse.urlencode(formdata).encode('utf-8')
  21. req_ligin = request.Request(url=main_url, data=logingpostdata, headers=headers)
  22. response_login = opener.open(req_ligin).read().decode('utf-8')


  23. # 获取验证码图片地址
  24. from bs4 import BeautifulSoup

  25. try:
  26.     soup = BeautifulSoup(response_login, "html.parser")
  27.     if soup.find('img', id='captcha_image'):
  28.         captchaAddr = soup.find('img', id='captcha_image')['src']

  29.         # 匹配验证码id
  30.         import re

  31.         reCaptchaID = r'<input type="hidden" name="captcha-id" value="(.*?)"/'
  32.         captchaID = re.findall(reCaptchaID, response_login)

  33.         # 下载验证码图片
  34.         request.urlretrieve(captchaAddr, "captcha.jpg")
  35.         # 输入验证码并加入提交信息中,重新编码提交获得页面内容
  36.         captcha = input('please input the captcha:')
  37.         formdata['captcha-solution'] = captcha
  38.         formdata['captcha-id'] = captchaID[0]
  39.         logingpostdata = parse.urlencode(formdata).encode('utf-8')
  40.         req_ligin = request.Request(url=main_url, data=logingpostdata, headers=headers)
  41.         response_login = opener.open(req_ligin).read().decode('utf-8')
  42. finally:
  43.     # 设置等待时间,避免爬取太快
  44.     import time
  45.     # 用于在超时的时候抛出异常,便于捕获重连
  46.     import socket
  47.     timeout = 3
  48.     socket.setdefaulttimeout(timeout)
  49.    
  50.     import random
  51.     import pandas as pd
  52.     xls_file=pd.ExcelFile('F:\\anaconda\\Scripts\\素媛.xlsx')
  53.     xls_file.sheet_names#显示出读入excel文件中的表名字
  54.     table1=xls_file.parse('好评')
  55.     mes=table1.用户主页
  56.     for i in mes:
  57.         url=i.strip()
  58.         req_comment = request.Request(url=url, headers=headers)
  59.             # 超时重连
  60.         state = False
  61.         while not state:
  62.             try:
  63.                 html = opener.open(req_comment).read().decode('utf-8')
  64.                 state = True
  65.             except socket.timeout:
  66.                 state = False
  67.         res=BeautifulSoup(html, "html.parser")
  68.         try:
  69.             a=res.find('div',class_='user-info')
  70.             b=a.find('a').get_text()
  71.             print(url+" "+b)
  72.         except:
  73.             print(url+" "+"无")
  74.         time.sleep(random.uniform(0,3))
  75.     print("抓取完成")
复制代码
回复

使用道具 举报

2

主题

10

帖子

10

积分

贫民

积分
10
dph233  楼主| 发表于 2017-12-4 22:47:15 | 显示全部楼层
  1. # 登录页面信息
  2. main_url = 'https://accounts.douban.com/login?source=movie'
  3. formdata = {
  4.     "form_email":"*********@qq.com",
  5.     "form_password":"****",
  6.     "source":"movie",
  7.     "redir":"https://movie.douban.com/subject/21937452/",
  8.     "login":"登录"
  9. }
  10. user_agent = r'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36 Firefox/23.0'
  11. headers = {'User-Agnet': user_agent, 'Connection': 'keep-alive'}


  12. # 保存cookies便于后续页面的保持登陆
  13. from urllib import request
  14. from http import cookiejar

  15. cookie = cookiejar.CookieJar()
  16. cookie_support = request.HTTPCookieProcessor(cookie)
  17. opener = request.build_opener(cookie_support)


  18. # 编码信息,生成请求,打开页面获取内容
  19. from urllib import parse

  20. logingpostdata = parse.urlencode(formdata).encode('utf-8')
  21. req_ligin = request.Request(url=main_url, data=logingpostdata, headers=headers)
  22. response_login = opener.open(req_ligin).read().decode('utf-8')


  23. # 获取验证码图片地址
  24. from bs4 import BeautifulSoup

  25. try:
  26.     soup = BeautifulSoup(response_login, "html.parser")
  27.     if soup.find('img', id='captcha_image'):
  28.         captchaAddr = soup.find('img', id='captcha_image')['src']

  29.         # 匹配验证码id
  30.         import re

  31.         reCaptchaID = r'<input type="hidden" name="captcha-id" value="(.*?)"/'
  32.         captchaID = re.findall(reCaptchaID, response_login)

  33.         # 下载验证码图片
  34.         request.urlretrieve(captchaAddr, "captcha.jpg")
  35.         # 输入验证码并加入提交信息中,重新编码提交获得页面内容
  36.         captcha = input('please input the captcha:')
  37.         formdata['captcha-solution'] = captcha
  38.         formdata['captcha-id'] = captchaID[0]
  39.         logingpostdata = parse.urlencode(formdata).encode('utf-8')
  40.         req_ligin = request.Request(url=main_url, data=logingpostdata, headers=headers)
  41.         response_login = opener.open(req_ligin).read().decode('utf-8')
  42. finally:
  43.     # 设置等待时间,避免爬取太快
  44.     import time
  45.     # 用于在超时的时候抛出异常,便于捕获重连
  46.     import socket
  47.     timeout = 3
  48.     socket.setdefaulttimeout(timeout)
  49.    
  50.     import random
  51.     import pandas as pd
  52.     xls_file=pd.ExcelFile('F:\\anaconda\\Scripts\\素媛.xlsx')
  53.     xls_file.sheet_names#显示出读入excel文件中的表名字
  54.     table1=xls_file.parse('好评')
  55.     mes=table1.用户主页
  56.     for i in mes:
  57.         url=i.strip()
  58.         req_comment = request.Request(url=url, headers=headers)
  59.             # 超时重连
  60.         state = False
  61.         while not state:
  62.             try:
  63.                 html = opener.open(req_comment).read().decode('utf-8')
  64.                 state = True
  65.             except socket.timeout:
  66.                 state = False
  67.         res=BeautifulSoup(html, "html.parser")
  68.         try:
  69.             a=res.find('div',class_='user-info')
  70.             b=a.find('a').get_text()
  71.             print(url+" "+b)
  72.         except:
  73.             print(url+" "+"无")
  74.         time.sleep(random.uniform(0,3))
  75.     print("抓取完成")
复制代码
回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2017-12-5 13:41:52 | 显示全部楼层
有些地址要登录才能打开,用try execpt pass跳过就可以
结果

所在地

所在地
回复

使用道具 举报

2

主题

10

帖子

10

积分

贫民

积分
10
dph233  楼主| 发表于 2017-12-12 10:58:43 | 显示全部楼层
请问有把全部用户的网站都遍历一遍吗?我的是登录状态下抓的数据,但是到119个网站就停了,也用了try语句了呀,可以把你的代码po出来吗?
回复

使用道具 举报

2

主题

10

帖子

10

积分

贫民

积分
10
dph233  楼主| 发表于 2017-12-12 10:59:35 | 显示全部楼层
sheeboard 发表于 2017-12-5 13:41
有些地址要登录才能打开,用try execpt pass跳过就可以
结果


请问有把全部用户的网站都遍历一遍吗?我的是登录状态下抓的数据,但是到119个网站就停了,也用了try语句了呀,可以把你的代码po出来吗?
回复

使用道具 举报

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

本版积分规则

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