day03-selenium简单语法xpath解析mongobd

1. selenium语法

"""__author__= 雍新有""" from selenium import webdriver# 模拟调用不同的浏览器 # webdriver.Chrome() # webdriver.Firefox() # webdriver.PhantomJS() # webdriver.Safari() # webdriver.Opera()broswer = webdriver.Chrome()broswer.get('http://www.taobao.com')

2. xpath语法
"""__author__= 雍新有""" """ 使用xpath解析源码 """ from lxml import etreehtml = ''' Title
  • 1
  • 2
  • 3
  • 4
  • 5
    • 6
    • 7
    • 8
'''# soup = BeautifulSoup(html, 'lxml') tree = etree.HTML(html)# 拿到整个html的内容,只不过是一个对象'/'表示从根节点去获取元素 a1 = tree.xpath('/html') print(a1)# '//'从任何一个位置上获取元素 a2 = tree.xpath('//ul') print(a2)a3 = tree.xpath('/html/body/div/ul') print(a3)a4 = tree.xpath('/html/body/div/ul/li/ul') print(a4) for item in a4:# '.'表示当前位置,此处,表示ul的位置 print(item.xpath('./li/a')) # '@'获取属性 print(item.xpath('./li/a/@href')) # text()表示获取标签内的信息 print(item.xpath('./li/a/text()'))# //* -- 从任何一个位置去找所有类名为class1的标签 a5 = tree.xpath('//*[@class="class1"]') print(a5) for item in a5: print(item.xpath('./a/text()'), item.xpath('./a/@href'))

3. mongodb 3.1 mongodb语法 【day03-selenium简单语法xpath解析mongobd】查看数据库: show dbs
创建数据库: db.createCollection('maoyan')
使用: use maoyan
MongoDB中的概念:数据库(类似mysql中的数据库)、
集合(类似mysql中的表)、
文档(不用定义表结构,直接记录数据)
注意: 集合可不用自己创建,向集合中插入数据时,集合会自动创建
db.集合名.insert() ===> db.user.insert({'name': 'whf'})
db.集合名.save()
db.集合名.find() 查询集合内的文档信息
db.集合名.find({}) 查询集合内的文档信息
show collections 查询集合
db.集合名.drop() 删除集合 -- 删除表
db.user(集合名).remove({'name': 'li4'}) (条件) -- 删除集合中的文档(删除一条记录)
db.user.update({'name': 'zhang3'}, {'$set':{'age': 20}}) -- 修改字段
3.2 mongodb数据库连接
"""__author__= 雍新有""" """ 使用pymongo """ import pymongo# 获取客户端 client = pymongo.MongoClient(host='47.100.164.252', port=27017)# 获取数据库 db = client['spider']def execute_movie(data):db['douban'].insert(data)if __name__ == '__main__': data = https://www.it610.com/article/{'title': '一出好戏', 'rate': '9.0'} execute_movie(data)

4. 豆瓣电影爬取
  • json接口
  • mongdb存储
"""__author__= 雍新有""" import jsonfrom db_helper import execute_movie""" 爬取豆瓣电影,进行存储(采用mongodb) - 爬接口而不是直接爬页面数据 """ import requestsdef get_html(url): # request中默认user-agent为python=requests/版本 # urllib中默认user-agent为python-urllib/版本 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36' } try: response = requests.get(url, headers=headers) # loads()将json格式数据转化成dict # dumps()将dict转化成json格式数据 data = https://www.it610.com/article/json.loads(response.text) return data except Exception as e: print('IP异常,请切换IP') # TODO:从ip代理池获取一个有效代理 proxies = { 'http': 'http://183.129.207.78:18118' } response = requests.get(url, headers=headers, proxies=proxies) # loads()将json格式数据转化成dict # dumps()将dict转化成json格式数据 data = https://www.it610.com/article/json.loads(response.text) return dataif __name__ =='__main__':# 分类地址 tag_url = 'https://movie.douban.com/j/search_tags?type=movie&source=' # 获取电影信息地址 movie_url = 'https://movie.douban.com/j/search_subjects?type=movie&tag={tag}&sort=recommend&page_limit=20&page_start={start}' # 获取分类接口返回信息 result = get_html(tag_url) for tag in result['tags']: for i in range(20): real_url = movie_url.format(tag=tag, start=i*20) # 获取到的是电影信息 result_movie = get_html(real_url) print(result_movie['subjects']) data = https://www.it610.com/article/result_movie['subjects'] if len(data): # 接口返回电影信息存在,则保持 for item in data: # item为每一个电影的信息,使用mongdb存储 # 使用pymongo进行存储数据 execute_movie(data) else: # 接口返回电影信息不存在,则跳出当前循环 break

5. 爬取u17最热
  • 用的本地mongdb
  • post请求
"""__author__= 雍新有""" import pymongo import requests import jsonclient = pymongo.MongoClient(host='127.0.0.1', port=27017) db = client['spider']def get_html(url, data): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36', } response = requests.post(url, headers=headers, data=data) result = json.loads(response.text)return resultdef save_mongo(data): for item in data: db['u17'].insert_one(item)def main(): post_url = 'http://www.u17.com/comic/ajax.php?mod=comic_list&act=comic_list_new_fun&a=get_comic_list' comic_url = 'http://www.u17.com/comic/{comic_id}.html' for i in range(1, 6): data = https://www.it610.com/article/{'data[group_id]': 'no', 'data[theme_id]': 'no', 'data[is_vip]': 'no', 'data[accredit]': '2', 'data[color]': 'no', 'data[comic_type]': 'no', 'data[series_status]': 'no', 'data[order]': '1', 'data[page_num]': str(i), 'data[read_mode]': 'no', } json = get_html(post_url, data) real_result = [] for item in json['comic_list']: data = https://www.it610.com/article/{'real_url': comic_url.format(comic_id=item['comic_id']), 'name': item['name'], 'img': item['cover'], 'type': item['line1'], } real_result.append(data) print(real_result) save_mongo(real_result)if __name__ == '__main__': main()

    推荐阅读