python爬虫1

1 网页结构

  html:超文本标记语言------->类似人的鼻子耳朵,长在那里,大体骨架就是那个样子

  css:层叠样式表------->这个是外观的深化,比如贴个双眼皮,橙色眼睛。。。

  js:动态脚本语言----->人的技能,跳舞rap

学习网站:w3cshool

2 requests使用

(1)开发环境使用pycharm

(2)爬虫基本原理

  request---->向服务器发送访问的请求

  responce---->服务器收到用户请求以后,会验证请求的有效性然后向用户发送响应的内容。客户端收到响应并显示出来。

(3)get post请求方式

  get:

  post:

    使用有道翻译网页作为案例,http://fanyi.youdao.com/,按F12进入开发者模式,单击network,此时为空。

    在输入框中输入"中国你好"单击翻译

    单击network---->XHR找到翻译数据

    查看请求方式为post,并可以加那个headers中的URL复制出来,因为post需要自己构建请求头

   使用request.post抓取有道翻译的结果

 1 import requests
 2 import json
 3 def get_translate_date(word=None):
 4     url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
 5     Form_data = {'i':word, 'from':'AUTO','to': 'AUTO','smartresult': 'dict', 'client':'fanyideskweb',
 6                     'salt':'1512399450582','sign':'78181ebbdcb38de9b4a3f4cd1d38816b','doctype':'json',
 7                     'version': '2.1','keyfrom':'fanyi.web','action':'FY_BY_CLICKBUTTION','typoResult':'false'}
 8     
 9     response = requests.post(url, data=Form_data)                # 请求表单数据
10     content = json.loads(response.text)   # 将JSON格式字符串转字典
11     print(content)
12     print(content['translateResult'][0][0]['tgt'])             # 打印翻译后的数据
13 if __name__ == '__main__':
14     get_translate_date('中国你好')
View Code

3 使用beautiful soup解析网页

  通过requests可以抓取网页源码并解析提取数据,beautiful soup被移植到bs4库中,也就是安装它需要先安装bs4.官方中文文档https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

(1)打开网页

http://www.cntour.cn/

(2)筛选路径soup.select()

随便选择一句话----->右击检查(右侧弹出开发者界面)----->右击左边高亮数据------>选择copy----->选择copy selector

(3)引入re库

https://docs.python.org/zh-cn/3/library/re.html re中文官网

(4)最终代码

 1 import  requests
 2 from bs4 import BeautifulSoup
 3 import re
 4 
 5 url="http://www.cntour.cn/"
 6 strhtml=requests.get(url)
 7 soup=BeautifulSoup(strhtml.text,'lxml')# 通过lxml解析后转换为树形结构,每个节点都是对象
 8 data=soup.select("#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li > a")
 9 print(data)
10 for item in data:
11     result={
12         'title':item.get_text(),#连接在<a>标签中用get_text
13         'link':item.get('href'),#在<a>href属性用get
14         'ID':re.findall('d+',item.get('href'))#d表示匹配数字 +表示匹配前一个字符1次或者多次
15     }
16     print(result)
View Code

(5)最后结果

 完事!

原文地址:https://www.cnblogs.com/lanjianhappy/p/11782888.html