python爬虫urllib(二)

import urllib.request
import urllib
import re
def demo(url):
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
    html=urllib.request.Request(url=url,headers=headers)
    html_w=urllib.request.urlopen(html).read().decode("utf-8")
    reg=r'<p>(.*?)<p>'
    regg=r'<h3 class="j_chapterName">(.*?)</h3>'
    regg=re.compile(regg)
    reg=re.compile(reg)
    result=re.findall(reg,html_w)
    result_title=re.findall(regg,html_w)
    file=open("c.txt","a")
    for i in result_title:
        print(i)
        file.write('\n'+i+'\n')
    for j in result:
        j = j.replace(" ", "")
        j = j.replace("\u3000", "")
        print(j)
        file.write(j+'\n')
def getNovelContent(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
    htm=urllib.request.Request(url=url,headers=headers)
    html = urllib.request.urlopen(htm).read().decode("utf-8")
    reg=r' <a id="j_chapterNext" href="(.*?)" data-eid="qd_R109" >.*?</a>'
    reg=re.compile(reg)
    result=re.findall(reg,html)
    for i in result:
        i="https:"+i
        return i
if __name__ == '__main__':
    demo("https://read.qidian.com/chapter/JXV9iAzXh5vWqUKqg3FQnA2/SRpuPFULZUTgn4SMoDUcDQ2")
    url = getNovelContent("https://read.qidian.com/chapter/JXV9iAzXh5vWqUKqg3FQnA2/SRpuPFULZUTgn4SMoDUcDQ2")
    while(1):
        print("\n")
        demo(url)
        url=getNovelContent(url)

先上完整代码。这里爬的是起点小说网整本小说,小说地址:https://read.qidian.com/chapter/JXV9iAzXh5vWqUKqg3FQnA2/SRpuPFULZUTgn4SMoDUcDQ2
通过对网页源代码的分析我们发现小说标题在h3标签内,正文在p标签内。在这里插入图片描述
首先我们来获取标题,利用正则表达式进行简单匹配

regg=r'<h3 class="j_chapterName">(.*?)</h3>'
regg=re.compile(regg)
result_title=re.findall(regg,html_w)
print(result_title)

获取第一章标题后,紧跟着正文

reg=r'<p>(.*?)<p>'
reg=re.compile(reg)
result=re.findall(reg,html_w)
print(result)

输入后会发现,输入的是列表类型,我们只需要利用for循环将内容提出来即可。并且正文中输出后会有\u3000和空格,运用replace将其用""替换掉

		reg=r'<p>(.*?)<p>'
        regg=r'<h3 class="j_chapterName">(.*?)</h3>'
        regg=re.compile(regg)
        reg=re.compile(reg)
        result=re.findall(reg,html_w)
        result_title=re.findall(regg,html_w)
        for i in result_title:
            print(i)
        for j in result:
            j = j.replace(" ", "")
            j = j.replace("\u3000", "")
            print(j)

爬小说当然不能只爬一章,在源代码处我们发现有下一章链接可以链接到下一章,同理可爬第二章,最后利用while循环即可讲整本书爬下来。在这里插入图片描述
在这里会发现这个链接少了https: 所以在给函数传递值的时候不要忘记在获取到的链接前加上它。

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
htm=urllib.request.Request(url=url,headers=headers)
html = urllib.request.urlopen(htm).read().decode("utf-8")
reg=r' <a id="j_chapterNext" href="(.*?)" data-eid="qd_R109" >.*?</a>'
reg=re.compile(reg)
result=re.findall(reg,html)
for i in result:
   i="https:"+i
   return i

最后就可以写入文件啦,这里说明一下open(“文件名.txt”,“a”)

’r’:只读
‘w’:只写
‘a’:追加
‘r+’ == r+w(可读可写,文件若不存在就报错(IOError))
‘w+’ == w+r(可读可写,文件若不存在就创建)
‘a+’ ==a+r(可追加可写,文件若不存在就创建)
对应的,如果是二进制文件,就都加一个b就可以了:
‘rb’  ‘wb’  ‘ab’  ‘rb+’  ‘wb+’  'ab+'

写入的时候不要忘记换行啦,否则写入的小说就在同一行了。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值