鱼C论坛

 找回密码
 立即注册
查看: 5442|回复: 5

[已解决]Python 爬虫 正则

[复制链接]
发表于 2017-6-9 01:13:47 | 显示全部楼层 |阅读模式
5鱼币
  1. import re
  2. import csv
  3. import time
  4. import random
  5. import  threading
  6. import requests
  7. import urllib.request
  8. from bs4 import BeautifulSoup
  9. from urllib.error import URLError
  10. from multiprocessing import Queue


  11. User_Agent=["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36",
  12.             "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
  13.             "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
  14.             "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
  15.             "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
  16.             'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0']
  17. HEADERS = {
  18.     'User-Agent':  User_Agent[random.randint(0,6)],
  19.     # 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/201002201 Firefox/55.0',
  20.     'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  21.     'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
  22.     'Accept-Encoding': 'gzip, deflate, br',
  23.     'Cookie': '',
  24.     'Connection': 'keep-alive',
  25.     'Pragma': 'no-cache',
  26.     'Cache-Control': 'no-cache'
  27. }
  28. proxies = {
  29.   "http": "http://",
  30.   "https": "https://1.196.123.98:808",
  31. }

  32. def Ip(i, x): # 爬取ip
  33.     try:
  34.         r = requests.get('http://www.kuaidaili.com/free/inha/' + str(i) + '/', timeout=30)
  35.         r.raise_for_status()
  36.         r.encoding = r.apparent_encoding
  37.         html = r.text
  38.     except URLError as e:
  39.         if hasattr(e, 'reason'):
  40.             print('没有找到服务器')
  41.             print('Reason:', 'e.reason')
  42.         elif hasattr(e, 'code'):
  43.             print('服务器无法完成请求')
  44.             print('Error code', e.code)
  45.     ip = r'<td data-title="IP">(.*?)</td>'
  46.     port = r'<td data-title="PORT">(.*?)</td>'
  47.     ip_list = re.findall(ip, html)
  48.     port_list = re.findall(port, html)
  49.     print(len(ip_list), len(port_list))
  50.     for i in range(len(ip_list)):
  51.         x.append(ip_list[i] + ':' + port_list[i])
  52.     return x

  53. def Page(): # 确定爬取ip的页面数
  54.     list_ip = []
  55.     for i in range(1,2):
  56.         list_ip = Ip(i,list_ip)
  57.         time.sleep(3)
  58.     return list_ip



  59. def Scenic(ip_list):
  60.     url = 'http://piao.qunar.com/ticket/detail_648971909.html?st=' \
  61.           'a3clM0QlRTYlQjklOTglRTYlQkQlQUQlMjZpZCUzRDM3NDIlMjZ0eXBlJTNEMCUyNmlke' \
  62.           'CUzRDMlMjZxdCUzRHJlZ2lvbiUyNmFwayUzRDIlMjZzYyUzRFdXVyUyNmFidHJhY2UlM0R' \
  63.           'id2QlNDAlRTUlQTQlOTYlRTUlOUMlQjAlMjZ1ciUzRCVFNiVCOSU5NiVFNSU4RCU5NyUyNmxy' \
  64.           'JTNEJUU2JUI5JTk4JUU2JUJEJUFEJTI2ZnQlM0QlN0IlN0Q%3D#from=mps_search_suggest_h'
  65.     proxies['http'] = 'http://' +str(list_ip[random.randint(0, 15)])
  66.     response= requests.get(url,headers=HEADERS,allow_redirects=False,timeout=5).content.decode('utf-8')
  67.     print(response)
  68.     with open('ceshi2.txt', 'w') as f:
  69.         f.write(response)


  70. if __name__ == '__main__':
  71.     list_ip = Page()
  72.     Scenic(list_ip)
复制代码

想写个爬数据的代码,这是写得一部分测试代码   但抓取的页面代码不全 后面评论区的基本没有,
前面也有一些空白的行 如:
                     <div class="mp-charact-desc">

                         <p>

                           

                                9:00~17:00开放;

                                

                           

                         </p>
我想问下:
1、怎么才能抓取完整的页面代码?
2、若抓取的是这样的页面,若我想匹配如上所说的信息“9:00~17:00开放;”,该如何写正则表达式或用其他方法怎么实现?
急求,有高手能帮忙解决吗?
最佳答案
2017-6-9 01:13:48
本帖最后由 gopythoner 于 2017-6-9 18:09 编辑
太阳花田 发表于 2017-6-9 17:54
方法一:继续使用正则,先把网页中的空格和换行符都替换掉,replace()函数知道吧,这个应该怎么写
另 ...


你的意思是你在网页中能够看到的信息,但是用爬虫爬下来的源代码是没有的对吧?
我看了一下,这个网站的价格等信息都是通过异步加载出来的 ,如果你会看F12的抓包信息的话,看看HXR这个里面的就知道了,是存在一个json格式里面的


请求这个http://piao.qunar.com/ticket/detail/getTickets.json链接(你直接请求是没用的,要提交表单),然后使用POST发送信息
表单信息是
  1. sightId:3742
  2. from:detail
  3. supplierId:
复制代码

最佳答案

查看完整内容

你的意思是你在网页中能够看到的信息,但是用爬虫爬下来的源代码是没有的对吧? 我看了一下,这个网站的价格等信息都是通过异步加载出来的 ,如果你会看F12的抓包信息的话,看看HXR这个里面的就知道了,是存在一个json格式里面的 请求这个http://piao.qunar.com/ticket/detail/getTickets.json链接(你直接请求是没用的,要提交表单),然后使用POST发送信息 表单信息是
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-9 01:13:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 gopythoner 于 2017-6-9 18:09 编辑
太阳花田 发表于 2017-6-9 17:54
方法一:继续使用正则,先把网页中的空格和换行符都替换掉,replace()函数知道吧,这个应该怎么写
另 ...


你的意思是你在网页中能够看到的信息,但是用爬虫爬下来的源代码是没有的对吧?
我看了一下,这个网站的价格等信息都是通过异步加载出来的 ,如果你会看F12的抓包信息的话,看看HXR这个里面的就知道了,是存在一个json格式里面的


请求这个http://piao.qunar.com/ticket/detail/getTickets.json链接(你直接请求是没用的,要提交表单),然后使用POST发送信息
表单信息是
  1. sightId:3742
  2. from:detail
  3. supplierId:
复制代码

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

使用道具 举报

发表于 2017-6-9 09:33:35 | 显示全部楼层
方法一:继续使用正则,先把网页中的空格和换行符都替换掉,replace()函数知道吧,
替换掉之后你得到的网页就是如下这样
  1. <div class="mp-charact-desc"><p>9:00~17:00开放;</p>
复制代码

到了这个地步然后再用正则匹配,搞定
方法二:使用BeautifulSoup4直接提取标签,这种做法就不用考虑空格的问题,因为会把<p>标签的信息都提取到,提取之后再用strip()函数去掉空格就行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-9 17:54:36 | 显示全部楼层
本帖最后由 太阳花田 于 2017-6-9 17:55 编辑
gopythoner 发表于 2017-6-9 09:33
方法一:继续使用正则,先把网页中的空格和换行符都替换掉,replace()函数知道吧,
替换掉之后你得到的网 ...


方法一:继续使用正则,先把网页中的空格和换行符都替换掉,replace()函数知道吧,这个应该怎么写
另怎样才能抓取完整的页面  不说后面评论区的完全没有  我抓取下来有的为什么好多缺失  价格都没法看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-9 20:21:44 | 显示全部楼层
gopythoner 发表于 2017-6-9 18:06
你的意思是你在网页中能够看到的信息,但是用爬虫爬下来的源代码是没有的对吧?
我看了一下,这个网站 ...

按F12我去网络部分看了HXR,点击F5刷新确实有些信息在主页上没加载,但我在的GET里面好像也没有看到那些信息    旁边是消息头,响应,cookie,参数,耗时五个部分
另外我是不是先用requests.post提交表单之后再用get就能获得全部信息吗?另外表单上的三个参数代表什么意思,为什么最后一个supplierID后面是空的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-9 22:13:14 | 显示全部楼层
gopythoner 发表于 2017-6-9 21:20
哎,直接写给你算了

谢谢了,开始不知道为什么没有POST只有GET,刚刚在POST里找到了  表单信息也在cookie里面找到了   
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-21 20:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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