鱼C论坛

 找回密码
 立即注册
查看: 2083|回复: 8

[已解决]BeautifulSoup

[复制链接]
发表于 2017-5-25 14:45:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import urllib.request
>>> from bs4 import BeautifulSoup
>>> url = 'http://baike.baidu.com/view/284853.htm'
>>> response = urllib.request.urlopen(url)
>>> html = response.read()
>>> soup = BeautifulSoup(html,'html.parser')
>>> import re
>>> for each in soup.find_all(href=re.sompile('view')):
        print(each.text,'->',''.join(['http://baike.baidu.com',\ each['href']]))
       
SyntaxError: unexpected character after line continuation character



最后一句报错是为什么,书上不就是这么写的么
最佳答案
2017-5-25 14:54:23
print(each.text,'->',''.join(['http://baike.baidu.com',\ each['href']]))
这句应该缩进,你没有缩进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-25 14:54:23 | 显示全部楼层    本楼为最佳答案   
print(each.text,'->',''.join(['http://baike.baidu.com',\ each['href']]))
这句应该缩进,你没有缩进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-25 15:14:57 | 显示全部楼层
gopythoner 发表于 2017-5-25 14:54
print(each.text,'->',''.join(['http://baike.baidu.com',\ each['href']]))
这句应该缩进,你没有缩进

keyword = input('请输入关键词:')
    keyword = urllib.parse.urlencode({'word':keyword})
    response = \
urllib.request.urlopen('http://baike.baidu.com/search/word? % s' % \
keyword)

不懂最后一句会报语法格式错误,麻烦解答一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-25 15:41:45 | 显示全部楼层
小木子c 发表于 2017-5-25 15:14
keyword = input('请输入关键词:')
    keyword = urllib.parse.urlencode({'word':keyword})
    re ...

首先,你把你的代码用代码的格式复制过来,怎么用?你看到论坛编辑里面的<>了么?就在表情的左边,就是这个,把代码复制到这里面,形式是这样的
keyword = input('请输入关键词:')
然后,你要把出错的代码前后部分都复制过来,特别是报错的显示

最后,我看你这代码写的真乱,不该缩进的地方乱缩进,不需要换行的地方乱换行,看的真乱(形成这种很乱的原因是你不知道格式,都是复制的对吧,这样不对!)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-25 17:54:24 | 显示全部楼层
gopythoner 发表于 2017-5-25 15:41
首先,你把你的代码用代码的格式复制过来,怎么用?你看到论坛编辑里面的了么?就在表情的左边,就是这个 ...
import urllib.request
import urllib.parse
import re
from bs4 import BeautifulSoup


def main():
    keyword = input('请输入关键词:')
    keyword = urllib.parse.urlencode({'word':keyword})
    response = \
urllib.request.urlopen('http://baike.baidu.com/item/word? % s' % \
keyword)
    html = response.read()
    soup = BeautifulSoup(html,'html.parser')

    for each in soup.find_all(href = re.compile('view')):
        content = ''.join([each.text])
        url2 = ''.join(['http://baike.baidu.com',each['href']])
        response2 = urllib.request.urlopen(url2)
        html2 = response2.read()
        soup2 = BeautifulSoup(html2,'html.parse')
        if soup2.h2:
            content = ''.join([content,soup2.h2.text])
        content = ''.join([content,'->',url2])
        print(content)

if __name__ == '__main__':
    main()


报错:
Traceback (most recent call last):
  File "C:\Users\Python练习\BeautifulSoup.py", line 28, in <module>
    main()
  File "C:\Users\Python练习\BeautifulSoup.py", line 12, in main
    keyword)
  File "C:\Python32\lib\urllib\request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Python32\lib\urllib\request.py", line 532, in open
    response = meth(req, response)
  File "C:\Python32\lib\urllib\request.py", line 642, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python32\lib\urllib\request.py", line 570, in error
    return self._call_chain(*args)
  File "C:\Python32\lib\urllib\request.py", line 504, in _call_chain
    result = func(*args)
  File "C:\Python32\lib\urllib\request.py", line 650, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 400: Bad Request
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-25 18:07:38 | 显示全部楼层
urllib.request.urlopen('http://baike.baidu.com/item/word? % s' % \
keyword)

这句出错了,错误的原因的构造的链接错误,你可以打印一下这个构造之后的链接,看看跟你从网页上面直接看到的是不是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-25 21:23:29 | 显示全部楼层
gopythoner 发表于 2017-5-25 18:07
这句出错了,错误的原因的构造的链接错误,你可以打印一下这个构造之后的链接,看看跟你从网页上面直接 ...

请输入关键词:猪八戒
http://baike.baidu.com/search/word? word=%E7%8C%AA%E5%85%AB%E6%88%92

构造的链接如上,这个链接可以访问,虽然跟直接用百度百科搜索的网址的确是不一样,但最后出现的页面是相同的,你可以试一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-25 21:27:35 | 显示全部楼层
gopythoner 发表于 2017-5-25 18:07
这句出错了,错误的原因的构造的链接错误,你可以打印一下这个构造之后的链接,看看跟你从网页上面直接 ...

这里我把item改成了search,不过还是会报同样的错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-25 23:21:13 | 显示全部楼层
小木子c 发表于 2017-5-25 21:27
这里我把item改成了search,不过还是会报同样的错误

我试了一下你这个代码,请求无效
需要加上请求头,也就是headers才能请求成功,看我换个方式请求的结果
import urllib.request
import urllib.parse
import re
import requests
from bs4 import BeautifulSoup


def main():
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
                             ' (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
    keyword = input('请输入关键词:')
    keyword = urllib.parse.urlencode({'word':keyword})
    # response = urllib.request.urlopen('http://baike.baidu.com/item/word? % s' % keyword)
    # html = response.read()
    url = 'http://baike.baidu.com/item/word?%s' % keyword
    print(url)
    html = requests.get(url,headers=headers).text
    soup = BeautifulSoup(html,'lxml')

    for each in soup.find_all(href = re.compile('view')):
        content = ''.join([each.text])
        url2 = ''.join(['http://baike.baidu.com',each['href']])
        response2 = urllib.request.urlopen(url2)
        html2 = response2.read()
        soup2 = BeautifulSoup(html2,'lxml')
        if soup2.h2:
            content = ''.join([content,soup2.h2.text])
        content = ''.join([content,'->',url2])
        print(content)

if __name__ == '__main__':
    main()

自己看我改动的地方吧,自己去查怎么添加头信息

我请求的结果是这样的
请输入关键词:猪八戒
http://baike.baidu.com/item/word?word=%E7%8C%AA%E5%85%AB%E6%88%92
多ä1‰èˉ目录->http://baike.baidu.com/view/10812277.htm
ä1‰é¡1目录->http://baike.baidu.com/view/340519.htm
英文单èˉ(英文单词)->http://baike.baidu.com/subview/23213/10707247.htm#viewPageContent
编程èˉ-言ä¸-的一种数据类型(编程语言中的一种数据类型)->http://baike.baidu.com/subview/23213/11083998.htm#viewPageContent
Java分布式ä¸-文分èˉç»„件(Java分布式中文分词组件)->http://baike.baidu.com/item/word/17575520#viewPageContent
锁定->http://baike.baidu.com/view/10812319.htm
同ä1‰èˉ目录->http://baike.baidu.com/subview/71844/10028254.htm


前面都是乱码,这说明你后面的代码也有问题,跟编码有关,这个我没怎么看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-14 04:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表