百木园-与人分享,
就是让自己快乐。

python爬虫

一、re

import requests
import re

url = \"https://movie.douban.com/top250\"
headers = {
    \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36\"}  # 请求头
response = requests.get(url, headers=headers)
text = response.text
obj = re.compile(r\"\"\"<li>.*?<span class=\"title\">(?P<name>.*?)</span>.*?<p class=\"\">(?P<director>.*?)&nbsp;&nbsp;&nbsp;(?P<lead>.*?)...<br>(?P<time>.*?)&nbsp;/&nbsp;(?P<country>.*?)&nbsp;/&nbsp;(?P<type>.*?)\\s\\s\\s.*?<span class=\"rating_num\" property=\"v:average\">(?P<score>.*?)</span>.*?<span>(?P<number>.*?)</span>.*?<span class=\"inq\">(?P<quote>.*?)</span>\"\"\", re.S)
result = obj.finditer(text)  # 在text中查找obj(是一个Pattern对象),返回一个迭代器
for i in result:
    print(i.group(\"name\"))  # group()用于分组
    print(i.group(\"director\").strip())  # 去掉空格
    print(i.group(\"lead\"))
    print(i.group(\"time\").strip())
    print(i.group(\"country\"))
    print(i.group(\"type\"))
    print(i.group(\"score\"))
    print(i.group(\"number\"))
    print(i.group(\"quote\"))
response.close()

 

结果为:

肖申克的救赎
导演: 弗兰克·德拉邦特 Frank Darabont
主演: 蒂姆·罗宾斯 Tim Robbins /
1994
美国
犯罪 剧情
9.7
2613829人评价
希望让人自由。
霸王别姬
导演: 陈凯歌 Kaige Chen
主演: 张国荣 Leslie Cheung / 张丰毅 Fengyi Zha
1993
中国大陆 中国香港
剧情 爱情 同性
9.6
1940678人评价
风华绝代。
……

详细介绍请看python正则表达式

 

二、BeautifulSoup

import requests
from bs4 import BeautifulSoup

url = \"http://zhongdapeng.com/shucaijiage/831.html\"
response = requests.get(url)
response.encoding = \"utf-8\"
text = response.text
# 先把页面源代码交给BeautifulSoup处理,生成bs对象
page = BeautifulSoup(text, \"html.parser\")  # 指定为html解析器(parser)
# 再从bs对象中查找数据:1、find(只找一个) 2、find_all 这两者后面都是(标签,属性=值),注意属性可能为python的关键字,比如class,那么就要写成class_=值或者attrs={\"class\":值}
table = page.find(\"table\", attrs={\"cellspacing\": \"0\"})
trs = table.find_all(\"tr\")[1:]  # 去掉第0个
for tr in trs:
    tds = tr.find_all(\"td\")
    print(tds[1].text, tds[2].text, tds[4].text, tds[5].text)  # .text表示被标签标记的内容
response.close()

 

结果为:

意大利 
1.6-1.8 
香菜 
5.0-6.0

油麦菜 
1.7-1.7 
菠菜 
3.0-3.5

上青 
0.3-0.4 
茼蒿 
1.3-1.5
……

 

三、xpath

import requests
from lxml import etree
url = \"https://search.jd.com/Search?keyword=iphone&enc=utf-8&wq=iphone&pvid=eb21f8da6aad40ccb455dd20c5ce52d4\"
headers = {
    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36\"}  # 请求头
response = requests.get(url, headers=headers)
response.encoding = \"utf-8\"
text = response.text
treeoject = etree.HTML(text)  # 解析html
# 根据xpath来提取元素
lis = treeoject.xpath(\"\"\"/html/body/div[5]/div[2]/div[2]/div[1]/div/div[2]/ul/li\"\"\")
for li in lis:
    # /text()获取标签内的文本
    price = li.xpath(\"\"\"./div/div[3]/strong/i/text()\"\"\")[0]
    description = \"iPhone\".join(li.xpath(\"\"\"./div/div[4]/a/em/text()\"\"\")).strip()  # 去掉空格
    merchandiser = li.xpath(\"\"\"./div/div[7]/span/a/text()\"\"\")[0]
    print(price)
    print(description)
    print(merchandiser)
    print(\"\")
    # 可以用属性值索引:li[@class=\'…\']/…
    # //li代表匹配所有的后代li节点,不论几代
    # ./代表从相对目录开始查找
    # *代表通配符
    # @用来提取属性值:li/@class
response.close()

 

结果为:

6098.00
Apple iPhone 13 (A2634) 128GB 星光色 支持移动联通电信5G 双卡双待手机【快充套装】
Apple产品京东自营旗舰店

3999.00
Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待
Apple产品京东自营旗舰店

5499.00
Apple iPhone 13 128GB 午夜色 支持移动联通电信5G 双卡双待手机
广州电信京东自营旗舰店
……

 


来源:https://www.cnblogs.com/daxiangcai/p/16248813.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » python爬虫

相关推荐

  • 暂无文章