我现在在用Python在写一个爬虫,但是遇到了一些问题。这是我第一次在这里问问题,请允许我一一道来:
*** 问题1 ***
一开始我是用requests获取网页,用BeautifulSoup解析。
我们令 content = 获取的网页.text 这就是网页的内容的字符串。
这个字符串是完整的,因为将它直接输出成HTML文件可以看到完整的页面。
根据官网的教程,我用BeautifulSoup解析它 parsed = BefaultSoup(r.text) 后发现parsed字符串会出现如下的样子:
<td class="num"><a class="xi2" href="http://cssa-iit.s60-28.myverydz.com/forum.php?mod=viewthread&tid=62952&extra=page%3D1%26orderby%3Ddateline">1</a><em>47</em></td>
<td class="by">
<cite><a href="http://cssa-iit.s60-28.myver">y d z . c o m / h o m e . p h p ? m o d = s p a c e &u s e r n a m e = f d s a 1 2 3 " c = " 1 " > f d s a 1 2 3 / a > / c i t e >
e m > a h r e f = " h t t p : / / c s s a - i i t . s 6 0 - 2 8 . m y v e r y d z . c o m / f o r u m . p h p ? m o d = r e d i r e c t &t i d = 6 2 9 5 2 &g o t o = l a s t p o s t # l a s t p o s t " > s p a n t i t l e = " 2 0 1 3 - 5 - 2 7 0 1 : 2 4 " > 9 &n b s p ; \鰁MR/ s p a n > / a > / e m >
/ t d >
/ t r >
/ t b o d y >
t b o d y i d = " n o r m a l t h r e a d _ 6 2 9 4 9 " >
t r >
t d c l a s s = " i c n " >
a h r e f = " h t t p : / / c s s a - i i t . s 6 0 - 2 8 . m y v e r y d z . c o m / f o r u m . p h p ? m o d = v i e w t h r e a d &a m p ; t i d = 6 2 9 4 9 &a m p ; e x t r a = p a g e % 3 D 1 % 2 6 o r d e r b y % 3 D d a t e l i n e " t i t l e = " 癳梲鉙Sb _" t a r g e t = " _ b l a n k " >
i m g s r c = " s t a t i c / i m a g e / c o m m o n / f o l d e r _ n e w . g i f " / >
/ a >
/ t d >
t h c l a s s = " n e w " >
a h r e f = " h t t p : / / c s s a - i i t . s 6 0 - 2 8 . m y v e r y d z . c o m / f o r u m . p h p ? m o d = v i e w t h r e a d &a m p ; t i d = 6 2 9 4 9 &a m p ; e x t r a = p a g e % 3 D 1 % 2 6 o r d e r b y % 3 D d a t e l i n e " o n c l i c k = " a t a r g e t ( t h i s ) " c l a s s = " x s t " > 厤<pl>P H O N E 4 , 5 孴I P A D M I N I WY/ a >
</pl></a></cite></td></tr></tbody></table></form></div></div></div></div></div></body></html>
上述字符只是一部分内容,它的前部分和它之前的所有内容都是正常的字符串。
中间一大块是有问题的内容,所有字符都成为了字符和空格交替的形式。
最后一部分应该是BeautifulSoup自己添加的标签结束符。因为整个网页明显不完整,而且
len(parsed) < len(content)
而我在网上也尝试搜索,结果却是无从搜索。
请问有人知道这是什么原因引起的吗。
*** 问题2 ***
后来我换用lxml解析网页内容。目前没有出现什么问题。不过我在获取正文文本时,不知道lxml该怎么直接获取某个节点的InnerHTML。所以我在下面这个网页中找到了一个方法:
http://stackoverflow.com/questions/4624062/get-all-text-inside-a-tag-in-lxml?answertab=votes#tab-top经测试确实可用,不过截取到的内容变成了下面的样子:
<i class="pstatus"> 本帖最后由 bbb324 于 2013-5-27 08:24 编辑 </i><br />
<br />
ps 3001, 纯实木床头柜,只要20.<br />
<br />
小的10块<br />
<br />
这段文本是用 print 打印出来的,所以这些就是实际字符串内容。那么我在将其保存在数据库之前有没有必要将所有 数字; 实体转换成对应的字符呢?最好请给出理由
P.S:这段字符串直接COPY到Chrome的DebugTool中可以自动转换成字符。
-------------------------------于是问题问完了--------------------------------------
谢谢大家