xpath基礎語法
import re
import requests
from lxml import etree
url = 'http://news.baidu.com/'
headers = {
"User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
data = requests.get(url, headers=headers).content.decode('utf-8')
xpath_data = etree.HTML(data)
result = xpath_data.xpath('/html/head/title//text()')
result = xpath_data.xpath('//a/text()')
result = xpath_data.xpath('//a[@mon="ct=1&a=2&c=top&pn=18"]/text()')
result = xpath_data.xpath('//a[@mon="ct=1&a=2&c=top&pn=18"]/@href')
print(result)
爬取巴比特網站的信息
import requests
from lxml import etree
import json
class BtcSpider(object):
def __init__(self):
self.base_url = 'http://8btc.com/forum-61-'
self.headers = {
"User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
}
self.data_list = []
def get_response(self, url):
response = requests.get(url, headers=self.headers)
data = response.content
return data
def parse_data(self, data):
x_data = etree.HTML(data)
title_list = x_data.xpath('//a[@class="s xst"]/text()')
url_list = x_data.xpath('//a[@class="s xst"]/@href')
for index, title in enumerate(title_list):
news = {}
news['name'] = title
news['url'] = url_list[index]
self.data_list.append(news)
def save_data(self):
data_str = json.dumps(self.data_list)
with open('05btc.json', 'w',encoding='utf-8') as f:
f.write(data_str)
def run(self):
for i in range(1, 5):
url = self.base_url + str(i) + '.html'
print(url)
data = self.get_response(url)
self.parse_data(data)
self.save_data()
BtcSpider().run()