xpath爬虫实战-爬取小说斗罗大陆第四部

爬取思路

爬取的一些问题

1.编码问题这两个编码无法转换成utf-8

  • UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa0’ in position 15: illegal multibyte sequence
    在这里插入图片描述
  • UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xufeff’ in position 15: illegal multibyte sequence
  • 解决:将这两个提前换成空字符
    在这里插入图片描述
    2.要提前建好一个txts的文件夹

全部源码

from lxml import etree
import requests
from fake_useragent import UserAgent


url1 = 'https://www.ibiquge.net/66_66791/'
url2 = 'https://www.ibiquge.net'


# 爬取HTML的函数
def get_html(url):
    ua = UserAgent()
    kv = {'user-agent': ua.random}
    re = requests.get(url, headers=kv)
    re.encoding = 'utf-8'
    htm1 = re.text
    return htm1


# 根据url获得文章并保存的函数
def get_text(url):
    html = get_html(url)
    selector = etree.HTML(html)
    title = selector.xpath('//*[@id="main"]/div/div/div[2]/h1/text()')
    txt = selector.xpath('//*[@id="content"]/text()')
    print(title)
    fp = open('txts\\' + title[0] + '.txt', 'w')
    for each in txt:
        each1 = each.replace('\ufeff', '')
        fp.write(each1.replace('\xa0', ''))
    fp.close()


def get_url(html):
    selector = etree.HTML(html)
    url_list = selector.xpath('//*[@id="list"]/dl/dd/a/@href')
    for url in url_list:
        new_url = url2 + url
        get_text(new_url)


if __name__ == '__main__':
    html = get_html(url1)
    get_url(html)

爬取过程
在这里插入图片描述
爬取结果
在这里插入图片描述

如有侵权,联系删除

posted @ 2020-02-02 17:53  10nnn4R  阅读(675)  评论(0编辑  收藏  举报